2014-02-09 39 views
0

我有一個GridView(AllItems)是這樣的:如何讓gridview顯示關聯數據源以外的數據?

enter image description here

的項目設備名稱,數量,一天的時間,備份時間和功率是從列表中提取: AllItems.DataSource =善堂;

項目TotalWatts,瓦時/紐約時報,瓦時/天必須由當地的整型變量中提取,但指定數據源不包含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; 


    } 
+0

你需要向我們展示你如何寫網格視圖 – AMember

+0

是啊..編輯。已經放置了代碼 –

回答

0

以下是一個簡單的例子。
希望這可以完美解決以上情況。
我有一個有三個字段的產品列表。

public class Product 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public double UnitPrice { get; set; } 
} 

我想在gridview中顯示這三個字段,同時在gridview中顯示一個額外的列,它是從列表的現有列派生的。即

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> 
1

你的簡化版,列表包含下列變量(屬性/列)。

TotalWatts = calcObj.GetTotalWattsOfEachAppliance(currentIndex); //int variable 
HrsNight = calcObj.GetWattsHrPerNight(currentIndex); //int variable 
HrsDay = calcObj.GetWattsHrPerDayForEachAppliance(currentIndex); //int variable 

您不能分配公共變量值的屬性數據字段<asp:BoundField DataField="TotalWatts"/>,TotalWatts應在列表中(你的數據源)可以存在。

您應該使用模板字段。

更換

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

通過

<asp:TemplateField HeaderText="ListsID" Visible="true"> 
    <ItemTemplate> 
    <asp:Literal ID="litListsID" runat="server" Text='<%# TotalWatts.ToString() %>'> 
     </asp:Literal> 
     </ItemTemplate> 
    <HeaderStyle HorizontalAlign="Left" VerticalAlign="Top" /> 
</asp:TemplateField> 

TotalWatts應該是一個公共變量。
你也可以在這裏使用你的功能。

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

你的意思是我沒有辦法讓我的gridview顯示項目不是數據源? –

+0

你可以使用templateField和boundFields以及更多的值。但我只是指向DataField –

+0

你的意思,而不是數據庫我寒use使用TemplateField =「TotalWatts」...對嗎? –