2011-05-05 75 views
38

我有一个DataTable,其中有5列:如何计算asp.net中数据表列的总和?

  • ID
  • 名称
  • 帐号
  • 分公司
  • 金额

的DataTable包含5行。

如何将标签控件中的金额列的总和显示为“总金额”?

+0

你有ADO.Net数据表或数据表按你的意思是数据库中的表? – 2011-05-05 05:24:50

+0

数据表是被用来提供Total还是被绑定到另一个控件,比如gridView或repeater?你们纯粹是从下面提炼出乔纳森伍兹的建议。 – 2011-05-05 05:26:43

+0

你知道你有5排,还是可以更多或更少? – 2011-05-05 05:35:50

回答

92

要计算DataTable中列的总和,请使用DataTable.Compute方法。

DataTable table; 
table = dataSet.Tables["YourTableName"]; 

// Declare an object variable. 
object sumObject; 
sumObject = table.Compute("Sum(Amount)", ""); 

结果显示在您的总金额标签,像这样:从链接的MSDN物品使用的

lblTotalAmount.Text = sumObject.ToString(); 
+0

他不想过滤表达式,他只是想计算所有行的数量。在你的答案中,Filteration表达式意味着它将计算EmpId = 5的总和。 – 2011-05-05 05:31:47

+0

它要求过滤器。我没有任何条件来过滤。我想汇总数据表中的所有行。 – thevan 2011-05-05 05:31:50

+0

@thevan,你可以检查我的解决方案,它的工作完美。 – 2011-05-05 05:33:16

22
this.LabelControl.Text = datatable.AsEnumerable() 
    .Sum(x => x.Field<int>("Amount")) 
    .ToString(); 

如果你想过滤结果:

this.LabelControl.Text = datatable.AsEnumerable() 
    .Where(y => y.Field<string>("SomeCol") != "foo") 
    .Sum(x => x.Field<int>("MyColumn")) 
    .ToString(); 
+0

谢谢托马斯。我从你的答案中学到了一件新事物。 – thevan 2011-05-05 06:00:39

8

如果你h AVE一个ADO.Net数据表,你可以做

int sum = 0; 
foreach(DataRow dr in dataTable.Rows) 
{ 
    sum += Convert.ToInt32(dr["Amount"]); 
} 

如果你要查询的数据库表,你可以使用

Select Sum(Amount) From DataTable 
14

你可以这样做..

DataRow[] dr = dtbl.Select("SUM(Amount)"); 
txtTotalAmount.Text = Convert.ToString(dr[0]); 
+0

谢谢你,akhtar。 – thevan 2011-05-05 05:58:23

5
public decimal Total() 
    { 
     decimal decTotal=(datagridview1.DataSource as DataTable).Compute("Sum(FieldName)",""); 
     return decTotal; 
    } 
0

您可以通过名称分组使用Linq

var allEntries = from r in dt.AsEnumerable() 
          select r["Amount"]; 
使用

名字空间using System.Linq;

您可以找到样本总数,分类汇总,总计在数据表中使用C#在Myblog

2

计算列的总和DataTable中,工程100%

lbl_TotaAmt.Text = MyDataTable.Compute("Sum(BalAmt)", "").ToString(); 

如果你想有任何条件,就这样使用它

lbl_TotaAmt.Text = MyDataTable.Compute("Sum(BalAmt)", "srno=1 or srno in(1,2)").ToString(); 
0

试试这个

int sum = 0; 
foreach (DataRow dr in dt.Rows) 
{ 
    dynamic value = dr[index].ToString(); 
    if (!string.IsNullOrEmpty(value)) 
    { 
     sum += Convert.ToInt32(value); 
    } 
} 
0

我认为这解决了

using System.Linq; 


(datagridview1.DataSource as DataTable).AsEnumerable().Sum(c => c.Field<double>("valor"))