Asp.net 我的gridview页脚未显示计算列的结果

Asp.net 我的gridview页脚未显示计算列的结果,asp.net,gridview,Asp.net,Gridview,我的aspx代码是: <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="Item_id" DataSourceID="SqlDataSource2" ShowFooter="True" onrowdataboun

我的aspx代码是:

 <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
                   AutoGenerateColumns="False" DataKeyNames="Item_id" 
                   DataSourceID="SqlDataSource2" ShowFooter="True" 
                   onrowdatabound="GridView1_RowDataBound">
                   <Columns>
                       <asp:TemplateField HeaderText="Item_id" InsertVisible="False" 
                           SortExpression="Item_id">
                           <ItemTemplate>
                               <asp:Label ID="Label1" runat="server" Text='<%# Bind("Item_id") %>'></asp:Label>
                           </ItemTemplate>
                           <EditItemTemplate>
                               <asp:Label ID="Label1" runat="server" Text='<%# Bind("Item_id") %>'></asp:Label>
                           </EditItemTemplate>
                           <FooterTemplate>
                                <asp:Button ID="BtnInsert" runat="server" Text="Insert"
                                    Font-Bold="true" BackColor="#0099CC" ForeColor="white" Height="30px" Width="100px" />
                            </FooterTemplate>
                       </asp:TemplateField>
                       <asp:TemplateField HeaderText="Category_name" SortExpression="Category_name">
                           <ItemTemplate>
                               <asp:Label ID="Label2" runat="server" Text='<%# Bind("Category_name") %>'></asp:Label>
                           </ItemTemplate>
                           <EditItemTemplate>
                               <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Category_name") %>'></asp:TextBox>
                           </EditItemTemplate>
                           <FooterTemplate>
                                <asp:TextBox ID="TbC" runat="server" Height="20px" Width="120px" Font-Bold="true"></asp:TextBox>
                            </FooterTemplate>
                            <ItemStyle Width ="100px" />
                       </asp:TemplateField>
                       <asp:TemplateField HeaderText="item_name" SortExpression="item_name">
                           <ItemTemplate>
                               <asp:Label ID="Label3" runat="server" Text='<%# Bind("item_name") %>'></asp:Label>
                           </ItemTemplate>
                           <EditItemTemplate>
                               <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("item_name") %>'></asp:TextBox>
                           </EditItemTemplate>
                           <FooterTemplate>
                                <asp:TextBox ID="TbN" runat="server" Height="20px" Width="120px" Font-Bold="true"></asp:TextBox>
                            </FooterTemplate>
                            <ItemStyle Width ="100px" />
                       </asp:TemplateField>
                       <asp:TemplateField HeaderText="unit_price" SortExpression="unit_price">
                           <ItemTemplate>
                               <asp:TextBox ID="TbPrice" runat="server" Text='<%# Bind("unit_price") %>'></asp:TextBox>
                           </ItemTemplate>
                           <EditItemTemplate>
                               <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("unit_price") %>'></asp:TextBox>
                           </EditItemTemplate>

                           <FooterTemplate>
                                <asp:TextBox ID="TbP" runat="server" Height="20px" Width="100px" Font-Bold="true"></asp:TextBox>
                            </FooterTemplate>
                            <ItemStyle Width ="100px" />
                       </asp:TemplateField>
                       <asp:TemplateField HeaderText="QuantitySelected" 
                           SortExpression="QuantitySelected">
                           <ItemTemplate>
                               <asp:Textbox ID="TbQt" runat="server"   Text='<%# Bind("QuantitySelected") %>'></asp:Textbox>
                           </ItemTemplate>
                           <EditItemTemplate>
                               <asp:TextBox ID="TextBox4" runat="server" 
                                   Text='<%# Bind("QuantitySelected") %>'></asp:TextBox>
                           </EditItemTemplate>
                           <FooterTemplate>
                                <asp:TextBox ID="TbQ" runat="server" Height="20px" Width="100px" Font-Bold="true"></asp:TextBox>
                            </FooterTemplate>
                            <ItemStyle Width ="100px" />
                       </asp:TemplateField>
                       <asp:TemplateField HeaderText="Total" SortExpression="Total">
                           <ItemTemplate>
                               <asp:Textbox ID="TbTl" runat="server" Text='<%# Bind("Total") %>'></asp:Textbox>
                           </ItemTemplate>
                           <EditItemTemplate>
                               <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("Total") %>'></asp:TextBox>
                           </EditItemTemplate>
                           <FooterTemplate>
                                <asp:TextBox ID="TbT" runat="server" Height="20px" Width="100px" Font-Bold="true"></asp:TextBox>
                            </FooterTemplate>
                            <ItemStyle Width ="100px" />
                       </asp:TemplateField>
                       <asp:TemplateField HeaderText="Discount" SortExpression="Discount">
                           <ItemTemplate>
                               <asp:Textbox ID="TbD" runat="server"   Text='<%# Bind("Discount") %>'></asp:Textbox>
                           </ItemTemplate>
                           <EditItemTemplate>
                               <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("Discount") %>'></asp:TextBox>
                           </EditItemTemplate>
                           <FooterTemplate>
                                <asp:TextBox ID="TbD" runat="server" Height="20px" Width="100px" Font-Bold="true"></asp:TextBox>
                            </FooterTemplate>
                            <ItemStyle Width ="100px" />
                       </asp:TemplateField>
                       <asp:TemplateField HeaderText="Grand_total" SortExpression="Grand_total">
                           <ItemTemplate>
                               <asp:Textbox ID="TbGtl" runat="server" Text='<%# Bind("Grand_total") %>'></asp:Textbox>
                           </ItemTemplate>

                           <EditItemTemplate>
                               <asp:TextBox ID="TextBox7" runat="server" Text='<%# Bind("Grand_total") %>'></asp:TextBox>
                           </EditItemTemplate>
                           <FooterTemplate>
                                <asp:TextBox ID="TbG" runat="server" Height="20px" Width="100px" Font-Bold="true"></asp:TextBox>
                            </FooterTemplate>
                            <ItemStyle Width ="100px" />
                       </asp:TemplateField>
                   </Columns>
               </asp:GridView>
我再次发布了我的编辑代码。问题是当我运行页面时,我的页脚中会出现空白文本框。“总计”列中只有文本框有值,这也是一些模糊的值。。我必须在“价格”“数量”中输入值,然后单击“插入”按钮将值与“总计”列中的计算值一起添加到网格中。。我还是被卡住了!!请帮忙

您还需要:

if (e.Row.RowType == DataControlRowType.DataRow)
你在哪里做总和

注意:变量需要在事件处理程序之外声明,否则在每次迭代中它们将被置零

编辑-当
e.Row.RowType==DataControlRowType.Header时,将求和变量归零

编辑执行以下操作:

double grand_total = 0;

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        grand_total = 0;
    }

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        double price    = Convert.ToDouble(((TextBox)e.Row.FindControl("TbP")).Text);
        double quantity = Convert.ToDouble(((TextBox)e.Row.FindControl("TbQ")).Text);
        double total    = price * quantity ;

        ((TextBox)e.Row.FindControl("TbT")).Text = total.ToString();

        grand_total += total;

    }

    if (e.Row.RowType == DataControlRowType.Footer)
    {
        ((TextBox)e.Row.FindControl("TbT")).Text = grand_total.ToString() ;
    }
}

我在这里给出了同一问题的答案->-我已经看过你的答案了。但我不明白有什么格式错误。在我的项目模板和页脚模板中,与标签相比,我有文本框。不管它们是什么,原理是一样的。实际上,下面的答案对你也有好处。我已经包括了if(e.Row.RowType==DataControlRowType.DataRow)。但这又是一个明显的错误。它说输入格式不正确。在总计的“calculationwell for one”中,不要逐字逐句地使用上面的代码-它未经测试-请更正语法等。这更多的是给你一个关于如何“动态”计算字段的一般前提。我在页脚的“总计”文本框列中得到了预定义的垃圾值。为什么?我已经发布了我编辑过的代码。在重复列中键入值时,我可以通过单击按钮进行插入。但我想计算“total”,然后将其插入网格,所以我添加了“rowdatabound”事件。救命!!只是想澄清一下……正如您目前定义的一样,total仅包含单行的价格*数量。您没有“总计总数”的总和,例如总计。因此,在页脚中指定的内容实际上是未定义的。
double grand_total = 0;

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        grand_total = 0;
    }

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        double price    = Convert.ToDouble(((TextBox)e.Row.FindControl("TbP")).Text);
        double quantity = Convert.ToDouble(((TextBox)e.Row.FindControl("TbQ")).Text);
        double total    = price * quantity ;

        ((TextBox)e.Row.FindControl("TbT")).Text = total.ToString();

        grand_total += total;

    }

    if (e.Row.RowType == DataControlRowType.Footer)
    {
        ((TextBox)e.Row.FindControl("TbT")).Text = grand_total.ToString() ;
    }
}