C# 如何让gridview显示关联数据源以外的数据?

C# 如何让gridview显示关联数据源以外的数据?,c#,asp.net,gridview,C#,Asp.net,Gridview,我有这样一个gridview(AllItems): 设备名称、数量、日时间、备份时间和电源从列表中提取: AllItems.DataSource=lst 项目TotalWatts、Wh/Nyt、Wh/Day必须通过局部整数变量提取,但指定的数据源不包含TotalWatts的值,这是一个例外 我应该怎么做才能使我的网格视图也接受局部变量 gridview的代码: <asp:GridView ID="AllItems" runat="server" AutoGenerateColumns="

我有这样一个gridview(AllItems):

设备名称、数量、日时间、备份时间和电源从列表中提取: AllItems.DataSource=lst

项目TotalWatts、Wh/Nyt、Wh/Day必须通过局部整数变量提取,但指定的数据源不包含TotalWatts的值,这是一个例外

我应该怎么做才能使我的网格视图也接受局部变量

gridview的代码:

<asp:GridView ID="AllItems" runat="server" AutoGenerateColumns="false" Height="124px" Width="191px" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Horizontal" OnDataBound="AllItems_DataBound" ShowFooter="true" FooterStyle-BackColor="Black">
                <Columns>
                    <asp:BoundField DataField="Applianc.Name" HeaderText="Appliance Name" />
                    <asp:BoundField DataField="Quantity" HeaderText="Quantity" />
                    <asp:BoundField DataField="DayTime" HeaderText="Day Time(Hrs)" />
                    <asp:BoundField DataField="BackUpTime" HeaderText="BackUp Time(Hrs)" />
                    <asp:BoundField DataField="Applianc.Power"  HeaderText="Power(Watts)" />
                   <asp:BoundField DataField="TotalWatts" HeaderText="Total Watts" />
                    <asp:BoundField DataField="HrsNight" HeaderText="Wh/Nyt" />
                    <asp:BoundField DataField="HrsDay" HeaderText="Wh/Day" />

                </Columns>
                <FooterStyle   BackColor="Black" ForeColor="White" Font-Italic="true" />
                <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
                <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
                <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
                <SortedAscendingCellStyle BackColor="#F7F7F7" />
                <SortedAscendingHeaderStyle BackColor="#4B4B4B" />
                <SortedDescendingCellStyle BackColor="#E5E5E5" />
                <SortedDescendingHeaderStyle BackColor="#242121" />
            </asp:GridView>

按钮点击页面后面的代码

protected void BtnAddNext_Click(object sender, EventArgs e)
    {
        List<Entity.UserSiteLoad> LstUsl = (List<Entity.UserSiteLoad>)Session["MyApplianceList"];
        e_usl.Applianc = new Entity.Appliance();
        calcObj = new CalculatorTest();

        e_usl.IdUserSiteLoad = Guid.NewGuid().ToString();
        e_usl.IdUserHousing = "xxx";
        e_usl.IdAppliance = DDLAppName.SelectedItem.Value.ToString(); //<<------------
        e_usl.Applianc.Name = DDLAppName.SelectedItem.Text;
        e_usl.Applianc.Power = new Random().Next(20, 500);
        e_usl.Quantity = Convert.ToInt32(QtyTB.Text);
        e_usl.DayTime = Convert.ToInt32(DayTymTB.Text);
        e_usl.BackUpTime = Convert.ToInt32(BackUpTymTB.Text);
        e_usl.CreatedBy = "sana";
        e_usl.CreatedDate = DateTime.Now;
        //e_usl.CreationDate = DateTime.Now;
        e_usl.ModifiedBy = "sana";
        e_usl.ModifiedDate = DateTime.Now;
        e_usl.IsActive = true;
        e_usl.IsDeleted = false;
        if (LstUsl.Count != 0)
        {
            for (int rowIndex = 0; rowIndex < LstUsl.Count; rowIndex++)
            {
                string AppName = LstUsl[rowIndex].Applianc.Name;
                if (AppName == DDLAppName.SelectedItem.Text)
                {
                    LstUsl.Remove(LstUsl[rowIndex]);
                }

            }
        }
        if (LstUsl.Count == 0 || LstUsl.Count > 0)
        {
            LstUsl.Add(e_usl);
        }
        Session["MyApplianceList"] = LstUsl;
        currentIndex = LstUsl.Count - 1; //int variable
        TotalWatts = calcObj.GetTotalWattsOfEachAppliance(currentIndex); //int variable
        HrsNight = calcObj.GetWattsHrPerNight(currentIndex); //int variable
        HrsDay = calcObj.GetWattsHrPerDayForEachAppliance(currentIndex); //int variable

        Response.Write("List Count is: " + LstUsl.Count); //check
        AllItems.DataSource = LstUsl;
        AllItems.DataBind();
        AllItems.Visible = true;

        Session["MyApplianceList"] = LstUsl;


    }
protectedvoid BtnAddNext\u单击(对象发送方,事件参数e)
{
List LstUsl=(List)会话[“MyApplianceList”];
e_usl.Appliance=新实体.Appliance();
calcObj=新的CalculatorTest();
e_usl.IdUserSiteLoad=Guid.NewGuid().ToString();
e_usl.IdUserHousing=“xxx”;

e_usl.idapplicence=DDLAppName.SelectedItem.Value.ToString();//您的列表不包含以下变量(属性/列)

您不能将公共变量值分配给属性数据字段
,TotalWatts应该存在于列表中(您的数据源)

您应该像这样使用模板字段

替换

<asp:BoundField DataField="TotalWatts" HeaderText="Total Watts" />


总瓦数应为公共变量。
你也可以在这里使用你的函数,比如

<asp:Literal ID="litListsID" runat="server" Text='<%# calcObj.GetTotalWattsOfEachAppliance(yourParameter) %>'>

下面是一个简单的例子。
希望这将完美地解决上述情况。
我有一个有三个字段的产品列表

 public class Product
 {
   public int ID { get; set; }
   public string Name { get; set; }
   public double UnitPrice { get; set; }
 }
我想在gridview中显示这三个字段,同时在gridview中显示一个额外的列,该列是从list.ie的现有列派生而来的

ID , Name , UnitPrice , and DozenPrice(means UnitPrice * 12)
在代码中看到,希望任何人都能解决他们显示派生列的问题

public partial class _Default : System.Web.UI.Page
{ 
    protected void Page_Load(object sender, EventArgs e)
    {
        fillGrid();
    }
    public class Product
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public double UnitPrice { get; set; }
    }
    public void fillGrid()
    {
        var ListProduct = new List<Product>();
        ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
        ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
        ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
        ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
        GridView1.DataSource = ListProduct;
        GridView1.DataBind();
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {     
        int Dozen = 12;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Product row = ((Product)e.Row.DataItem);
            double UnitPrice = row.UnitPrice;
            ((Literal)e.Row.FindControl("ltrDozenPrice")).Text = Convert.ToString(UnitPrice * Dozen);
        }
    }    
}
public分部类\u默认值:System.Web.UI.Page
{ 
受保护的无效页面加载(对象发送方、事件参数e)
{
fillGrid();
}
公共类产品
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共双单价{get;set;}
}
公共空间填充网格()
{
var ListProduct=新列表();
添加(新产品(){ID=1,Name=“item1”,单价=4.5});
添加(新产品(){ID=1,Name=“item1”,单价=4.5});
添加(新产品(){ID=1,Name=“item1”,单价=4.5});
添加(新产品(){ID=1,Name=“item1”,单价=4.5});
GridView1.DataSource=ListProduct;
GridView1.DataBind();
}
受保护的void GridView1_RowDataBound(对象发送方,GridViewRowEventArgs e)
{     
整数=12;
如果(e.Row.RowType==DataControlRowType.DataRow)
{
产品行=((产品)e.row.DataItem);
双单价=行。单价;
((文字)例如Row.FindControl(“ltrDozenPrice”)).Text=Convert.ToString(单价*打);
}
}    
}



您需要向我们展示您是如何编写网格视图的是..编辑的。是否放置了代码您的意思是我无法让我的网格视图显示除数据源之外的项目??您可以使用templateField和boundFields以及更多值。但我只指向datafield U意味着我应该使用templateField=“TotalWatts”而不是datafield…对吗?Siddique Mahsud,你能给我举个例子吗?谢谢…我会试试的
ID , Name , UnitPrice , and DozenPrice(means UnitPrice * 12)
public partial class _Default : System.Web.UI.Page
{ 
    protected void Page_Load(object sender, EventArgs e)
    {
        fillGrid();
    }
    public class Product
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public double UnitPrice { get; set; }
    }
    public void fillGrid()
    {
        var ListProduct = new List<Product>();
        ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
        ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
        ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
        ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
        GridView1.DataSource = ListProduct;
        GridView1.DataBind();
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {     
        int Dozen = 12;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Product row = ((Product)e.Row.DataItem);
            double UnitPrice = row.UnitPrice;
            ((Literal)e.Row.FindControl("ltrDozenPrice")).Text = Convert.ToString(UnitPrice * Dozen);
        }
    }    
}
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" onrowdatabound="GridView1_RowDataBound">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" />
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:BoundField DataField="UnitPrice" HeaderText="Unit Price" />
        <asp:TemplateField HeaderText="DozenPrice">
            <ItemTemplate>
                <asp:Literal ID="ltrDozenPrice"  runat="server"></asp:Literal>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>