2012-07-31 99 views
11

在我的Asp.net應用程序中,我有一個GridView,我自己使用後面的代碼生成了數據column[6]在GridView的頁腳中顯示總數,並在最後一列中添加列(列虎鉗)的總和

通過查看下面的代碼,我有一個footer爲我的gridview。問題是我的文字列[6]不會出現,如果我使用頁腳。 如果我刪除了腳本代碼,那麼列[6]的文本就會出現。問題是什麼?這兩個代碼不能使用togather?我已經設定ShowFooter = 「真」

protected void Page_Load(object sender, EventArgs e) 
{ 
    for (int i = 0; i < (this.GridView1.Rows.Count); i++) 
    { 
     this.GridView1.Rows[i].Cells[6].Text = "testing"; 
     //GridView1.Columns[1].FooterText ="footer 1"; 
    } 
} 

的.aspx

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" 
      AutoGenerateColumns="False" DataKeyNames="ID" CellPadding="4" 
      ForeColor="#333333" GridLines="None" ShowFooter="True" 
        onrowdatabound="GridView1_RowDataBound"> 
      <RowStyle BackColor="#EFF3FB" /> 
      <Columns> 
       <asp:BoundField DataField="reportDate" HeaderText="Report Date" dataformatstring="{0:dd MMMM yyyy}" SortExpression="reportDate" /> 
       <asp:BoundField DataField="sponsorBonus" HeaderText="Sponsor Bonus" dataformatstring="{0:0.00}" SortExpression="sponsorBonus" HtmlEncode="False" /> 
       <asp:BoundField DataField="pairingBonus" HeaderText="Pairing Bonus" HtmlEncode="False" SortExpression="pairingBonus" dataformatstring="{0:c}" />          
       <asp:BoundField DataField="staticBonus" HeaderText="Static Bonus" SortExpression="staticBonus" /> 
       <asp:BoundField DataField="leftBonus" HeaderText="Left Bonus" SortExpression="leftBonus" /> 
       <asp:BoundField DataField="rightBonus" HeaderText="Right Bonus" SortExpression="rightBonus" /> 
       <asp:BoundField HeaderText="Total" SortExpression="total" > 
       <ItemStyle Width="100px" /> 
       </asp:BoundField> 
      </Columns> 
      <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
      <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
      <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
      <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
      <EditRowStyle BackColor="#2461BF" /> 
      <AlternatingRowStyle BackColor="White" />    
     </asp:GridView> 
+0

你想要腳本文本設置dynamicaly? – 2012-07-31 06:39:33

+0

實際上頁腳是列的總和。上面的代碼只是例子,但它們會導致相同的問題 – melvintcs 2012-07-31 06:43:42

+0

你檢查了我的答案嗎? – 2012-07-31 06:44:44

回答

16

示例代碼:要設置頁腳文本編程

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Footer) 
     { 
     Label lbl = (Label)e.Row.FindControl("lblTotal"); 
     lbl.Text = grdTotal.ToString("c"); 
     } 
    } 

更新的代碼

 decimal sumFooterValue = 0; 
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 

     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
     string sponsorBonus = ((Label)e.Row.FindControl("Label2")).Text; 
     string pairingBonus = ((Label)e.Row.FindControl("Label3")).Text; 
     string staticBonus = ((Label)e.Row.FindControl("Label4")).Text; 
     string leftBonus = ((Label)e.Row.FindControl("Label5")).Text; 
     string rightBonus = ((Label)e.Row.FindControl("Label6")).Text; 
     decimal totalvalue = Convert.ToDecimal(sponsorBonus) + Convert.ToDecimal(pairingBonus) + Convert.ToDecimal(staticBonus) + Convert.ToDecimal(leftBonus) + Convert.ToDecimal(rightBonus); 
     e.Row.Cells[6].Text = totalvalue.ToString(); 
     sumFooterValue += totalvalue 
     } 

    if (e.Row.RowType == DataControlRowType.Footer) 
     { 
      Label lbl = (Label)e.Row.FindControl("lblTotal"); 
      lbl.Text = sumFooterValue.ToString(); 
     } 

    } 

在.aspx頁面中

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" 
     AutoGenerateColumns="False" DataKeyNames="ID" CellPadding="4" 
     ForeColor="#333333" GridLines="None" ShowFooter="True" 
       onrowdatabound="GridView1_RowDataBound"> 
     <RowStyle BackColor="#EFF3FB" /> 
     <Columns> 
      <asp:TemplateField HeaderText="Report Date" SortExpression="reportDate"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("reportDate") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" 
         Text='<%# Bind("reportDate", "{0:dd MMMM yyyy}") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Sponsor Bonus" SortExpression="sponsorBonus"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("sponsorBonus") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label2" runat="server" 
         Text='<%# Bind("sponsorBonus", "{0:0.00}") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Pairing Bonus" SortExpression="pairingBonus"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("pairingBonus") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label3" runat="server" 
         Text='<%# Bind("pairingBonus", "{0:c}") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Static Bonus" SortExpression="staticBonus"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("staticBonus") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label4" runat="server" Text='<%# Bind("staticBonus") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Left Bonus" SortExpression="leftBonus"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("leftBonus") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label5" runat="server" Text='<%# Bind("leftBonus") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Right Bonus" SortExpression="rightBonus"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("rightBonus") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label6" runat="server" Text='<%# Bind("rightBonus") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Total" SortExpression="total"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox7" runat="server"></asp:TextBox> 
       </EditItemTemplate> 
       <FooterTemplate> 
        <asp:Label ID="lbltotal" runat="server" Text="Label"></asp:Label> 
       </FooterTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label7" runat="server"></asp:Label> 
       </ItemTemplate> 
       <ItemStyle Width="100px" /> 

      </asp:TemplateField> 
     </Columns> 
     <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
     <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
     <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <EditRowStyle BackColor="#2461BF" /> 
     <AlternatingRowStyle BackColor="White" />    
    </asp:GridView> 

我的博客 - Asp.net Gridview Article

+0

錯誤:GridView沒有名爲「FooterTemplate」的公共屬性。 – melvintcs 2012-07-31 06:48:09

+0

@melvintcs:Footertemplate是他們的,那麼你可以發佈你的GridView .aspx源代碼 – 2012-07-31 06:52:35

+0

有更新,請檢查我的問題 – melvintcs 2012-07-31 06:57:06

0

這可以通過LINQ與分組來實現,這裏的產品清單指向作爲數據源,以實際的網格視圖。 可以幫助編碼實際的僞代碼示例。

var tabelDetails =(from li in dc.My_table 
    join m in dc.Table_One on li.ID equals m.ID 
    join c in dc.Table_two on li.OtherID equals c.ID 
    where //Condition 
group new { m, li, c } by new 
{ 
    m.ID, 
    m.Name 
} into g 
select new 
{ 
    g.Key.ID, 
    Name = g.Key.FullName, 
    sponsorBonus= g.Where(s => s.c.Name == "sponsorBonus").Count(), 
    pairingBonus = g.Where(s => s.c.Name == "pairingBonus").Count(), 
    staticBonus = g.Where(s => s.c.Name == "staticBonus").Count(), 
    leftBonus = g.Where(s => s.c.Name == "leftBonus").Count(), 
    rightBonus = g.Where(s => s.c.Name == "rightBonus").Count(), 
    Total = g.Count() //Row wise Total 
}).OrderBy(t => t.Name).ToList(); 

tabelDetails.Insert(tabelDetails.Count(), new //This data will be the last row of the grid 
{ 
    Name = "Total", //Column wise total 
    sponsorBonus = tabelDetails.Sum(s => s.sponsorBonus), 
    pairingBonus = tabelDetails.Sum(s => s.pairingBonus), 
    staticBonus = tabelDetails.Sum(s => s.staticBonus), 
    leftBonus = tabelDetails.Sum(s => s.leftBonus), 
    rightBonus = tabelDetails.Sum(s => s.rightBonus), 
    Total = tabelDetails.Sum(s => s.Total) 
});