2014-02-24 23 views
0

試圖對我設置的DataTable中的每列進行求和。數據表中的前2列包含文本,其餘列包含我想總結的數值。Sum DataTable列

我得到一個錯誤說沒有排在17位

當我向下滾動DataTable中觀衆可以看到有沒有排在17和無法明白爲什麼在foreach更是創下該行。 enter image description here

我有什麼我做錯了下面的代碼

for (int i = 2; i < DT.Columns.Count; i++) 
{ 
    foreach (DataRow DR in DT.Rows) 
    { 
     ColumnTotal = ColumnTotal + int.Parse(DR[i].ToString()); 
    } 
    DT.Rows[DT.Rows.Count + 1][i] = ColumnTotal; 
    ColumnTotal = 0; 
} 

誰能告訴我,我怎麼能改善它。

感謝

+0

爲什麼不試試'DT.AsEnumerable()總和(X => x.Field ( 「的ColumnName」));'..也。看來你也可以使用[DataTable.Compute](http://msdn.microsoft.com/en-us/library/system.data.datatable.compute%28v=vs.110%29.aspx) –

+0

也許你應該因爲DT.Rows [DT.Rows.Count + 1]'超出'DT.Rows'數組的範圍,因此爲sum添加數據行? – hmnzr

+0

排除最後一行。用於(j = 0; j ray

回答

2

您試圖在17-th行轉讓,但它不存在。所以首先創建它,然後填充它象下面這樣:

var row = DT.NewRow(); 
for (int i = 2; i < DT.Columns.Count; i++) 
{ 
    ColumnTotal = 0; 
    foreach (DataRow DR in DT.Rows) 
    { 
     ColumnTotal = ColumnTotal + int.Parse(DR[i].ToString()); 
    } 
    row[i] = ColumnTotal; 
} 
DT.Rows.Add(row); 
+0

謝謝你工作過一個款待 – Inkey

+0

你也歡迎!祝你好運。 –

1

不能設置行的值這樣

DT.Rows[DT.Rows.Count + 1][i] = ColumnTotal; 

,因爲它沒有17排,您可能需要添加一個新行。

做這樣的事情,

DataRow newRow = DT.NewRow(); 

for (int i = 2; i < DT.Columns.Count; i++) 
{ 
    foreach (DataRow DR in DT.Rows) 
    { 
     ColumnTotal = ColumnTotal + int.Parse(DR[i].ToString()); 
    } 

    newRow[i] = ColumnTotal; 

    ColumnTotal = 0; 
} 

DT.Rows.Add(newRow); 
0

簡單仁兄

Datatable Dt=new DataTable(); 
Dt.Columns.Add("Name"); 
Dt.Columns.Add("Amount"); 
Dt.Columns.Add("Id"); 
Dt.Rows.Add("Harsh","100", "1"); 
Dt.Rows.Add("Miller","200", "2"); 

現在計算使用該

object Sum = Dt.Compute(" SUM(Amount) ",""); 
double NetTotal = Double.Parse(Sum.ToString());