动态生成的gridview的列的总和

时间:2014-06-02 12:14:03

标签: c# asp.net .net gridview aspxgridview

我需要在页脚中获取gridview单元格的总和 GridView是动态生成的,然后显示在网页上 如果由cellId指定,我能够获得任何列的总和,但是当我尝试申请循环时,它不起作用..

这就是我到目前为止所做的......

if (e.Row.RowType == DataControlRowType.Header)  
{  
}  
else  
{  
    for (int i = 18; i < e.Row.Cells.Count; i++)  
    {  
     //  e.Row.Cells[i].Text = e.Row.Cells[i].Text.Trim().Replace("&nbsp;", "0").Replace("amp;", "0");  
         total[i] += Convert.ToDouble(e.Row.Cells[i].Text);  
    }  
}    

18是从中计算总和的列数。 已经放置了注释行,以便不存在null或空白....

2 个答案:

答案 0 :(得分:0)

我不确定您遇到了什么实际问题,但是,为什么不使用DataControlRowType.Footer代替这个小LINQ查询:

if (e.Row.RowType == DataControlRowType.Footer)
{
    double cellValue = 0;
    double sum = e.Row.Cells.Cast<TableCell>().Skip(18)
        .Where(cell => double.TryParse(cell.Text, out cellValue))
        .Sum(cell => cellValue);
}

答案 1 :(得分:0)

经过一些工作后,我想通了......感谢你向我展示正确的方向......

    if (GridView1.Rows.Count > 0)
    {
        int TtlRows = GridView1.Rows.Count;
        int TtlCol = GridView1.Rows[0].Cells.Count;
        int FxdCol = 1;
        int ComputedCol = TtlCol - FxdCol;

        for (int i = FxdCol; i < TtlCol; i++)
        {
            double sum = 0.000;

            for (int j = 0; j < TtlRows; j++)
            {
                sum += GridView1.Rows[j].Cells[i].Text != "&nbsp;" ? double.Parse(GridView1.Rows[j].Cells[i].Text) : 0.000;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[i].Text = sum.ToString("#0.000");
            }

        }  
    }