如何在网格视图中计算行的行总和并在网格视图中显示它?

时间:2011-03-14 09:20:28

标签: c# asp.net

我有一个显示某些值的网格视图。现在我必须计算每行的那些值的行方式总和,然后显示它们。

我试过这段代码,但由于输入字符串格式不正确,我收到错误。

public void gv_RowCreated(Object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        int total = Convert.ToInt32(e.Row.Cells[1].Text) + Convert.ToInt32(e.Row.Cells[2].Text) + Convert.ToInt32(e.Row.Cells[3].Text) + Convert.ToInt32(e.Row.Cells[4].Text) + Convert.ToInt32(e.Row.Cells[5].Text) + Convert.ToInt32(e.Row.Cells[6].Text) + Convert.ToInt32(e.Row.Cells[7].Text);

        ((Label)gv.FindControl("Label8")).Text = Convert.ToString(total);

    }
}

3 个答案:

答案 0 :(得分:0)

我假设您要在中对值进行求和,而不是列中的值(这是更常见的)。

您的网格将绑定到IEnumerable对象列表,这些对象的属性将构成网格的列。

执行此操作的简单方法是在数据对象上再添加一个属性,该属性可以是其他属性的总和 - 因此您具有计算属性。

但是,您可能希望将此属性显示为网格中的最后一列,为了可靠地执行此操作(以非黑客方式),您需要专门声明列,即您必须设置{{ 1}}到假。

修改

在查看你的代码后,我不得不说这是一种丑陋的方式(以这种方式处理网格行非常慢)。更好的方法是在计算数据对象中包含计算属性并将计算封装在那里,因为网格仅用于显示,并且不需要了解值本身。

这是一个示例数据对象,让您了解我的意思,我将数据类型混淆了一点只是为了使它更复杂一些:

AutoGenerateColumns

答案 1 :(得分:0)

尝试将以下代码设置为Label8的项目模板:

<asp:TemplateField HeaderText="Col8">
                <ItemTemplate>
                    <%# Convert.ToInt32(Eval("col1")) + Convert.ToInt32(Eval("col2")) + ... %>
                </ItemTemplate>
            </asp:TemplateField>
</asp:TemplateField>

检查它是否正常。

答案 2 :(得分:0)

使用此代码,

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label lblTotal = (Label)e.Row.FindControl("lblTotal");
        int iCount; 
        if (Decimal.TryParse(lblTotal.Text, iCount) ) {
             iCount += iCount;
        }
    }
    if (e.Row.RowType == DataControlRowType.Footer)
    {
        Label lblTotalAmt = (Label)e.Row.FindControl("lblTotalAmt");
        lblTotalAmt.Text =  iCount.ToString();
    }
}