在内部表格中有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;
答案 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
获得该库存的总数