计算winforms gridview中的总列数

时间:2013-07-02 09:11:21

标签: c# .net winforms

在内部表格中有gridview,其中填充了以下列

CODE, NAME, PRICE, QNT, TOTAL
1     Test  4.00    1   4.00
2     Test2 3.50    2   7.00

如何计算此总列数为11.00,例如将该值添加到labelOverall.Text属性?

由于

更新

Gridview就像这样填充

var sel = (Article)cmbArticleList.SelectedItem;

            DataRow newRow = articlesTable.NewRow();
            newRow["CODE"] = sel.Code;
            newRow["Name"] = sel.Name;

            articlesTable.Rows.Add(newRow);
            articlesGridView.DataSource = articlesTable;

5 个答案:

答案 0 :(得分:2)

通常,您应该始终使用DataSource来计算总和,最好是在数据库本身。 但是,如果您想在客户端之后计算它,您应该更喜欢网格的数据源,而不是解析单元格文本或使用网格的其他方法。

例如,在所有行都是数据绑定后直接触发的DataBound事件中:

protected void GridDataBound(object sender, EventArgs e)
{
    GridView grid = (GridView)sender;
    DataTable source = (DataTable)grid.DataSource;
    decimal totalSum = source.AsEnumerable().Sum(r => r.Field<decimal>("Total"));
    labelOverall.Text = totalSum.ToString();
}

请注意,Field方法是强类型的,如果实际类型不同,则抛出异常。

答案 1 :(得分:1)

DataTable有一个Compute方法,允许您对表数据执行计算。

因此,要计算Total行的总和,您可以执行以下操作:

var sum = articlesTable.Compute("SUM(TOTAL)", "");
newRow["Total"] = sum;

这应计算总和,然后更新总计行。

请记住在将行添加到表之前执行此操作。 : - )

编辑:
Compute方法的第二个参数是过滤器表达式。这允许您在需要时过滤计算中包含的行。

答案 2 :(得分:0)

在您的代码中尝试以下操作:

int sum = 0;
for(int i=0; i<gv.Rows.Count; i++)
{
   sum += gv[i, 4].Value;
}

答案 3 :(得分:0)

这样的事情:

labelOverall.Text  = articlesGridView.Rows.Cells.Select(n => Convert.ToDouble(n["TOTAL"].Value)).Aggregate((a,b) => a + b).ToInvariantString();

这将选择并转换所有总细胞,将它们相加并将答案分配给labelOverall.Text

答案 4 :(得分:0)

将其作为

int sum;
sum = articlesTable.Compute("Sum(COLUMNNAME)", "COLUMNNAME<> 0"); 

现在sum获得该库存的总数