2011-09-19 57 views
3

這似乎工作時,我把一個項目,以過濾,但我不想添加一個過濾器,即只是樂於總結列,就是它。與計算,但沒有過濾器SUM數據表列

我試過傳遞的String.Empty和「」,但沒有喜悅:

object objColTotal; 
objColTotal = _dataSetDataTable.Compute("Sum(Price)", ""); 
decimal tot = Convert.ToDecimal(objColTotal); 

回答

5

一個空字符串應該工作。

你總是可以使用一個你肯定會包含所有記錄的過濾器。


在小數列快速測試:

var dt = new DataTable(); 
dt.Columns.Add("DecCol1", typeof(decimal)); 
dt.Columns.Add("StrCol1"); 
dt.Rows.Add(new object[] { 1.1, "r1"}); 
dt.Rows.Add(new object[] { 2.2, "r2" }); 
dt.Rows.Add(new object[] { 3.3, "r3" }); 

object sum = dt.Compute("SUM(DecCol1)", ""); 
Console.WriteLine(sum); 

我得到正確的答案:6.6

+0

該列的數據類型十進制。我想知道這是否會導致問題,或者是否有辦法解決這個問題? – Dkong

+0

@Dkong我不這麼認爲;我跑了一個快速測試,它爲我工作。 –

+0

謝謝你幫助周杰倫。我以爲我瘋了,它一直帶回零,但它是列中值的長列表,其中-ive和+ ive值總計爲零。 – Dkong

0

注2個東西

  • 如果你的列名有空間你必須使用括號,不接受單引號或雙引號。
  • 也注意到,計算返回它的東西向上轉型成爲一個對象(INT)給出了一個錯誤,您必須使用像樣品等方法如下

樣本:

int Dones = int.Parse(dt.Compute("sum(Done)", "").ToString()); 
int InProgresss = int.Parse(dt.Compute("sum([In Progress])", "").ToString())