2011-05-05 81 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"))