数据表列总和和差异

时间:2015-02-15 09:26:59

标签: c# visual-studio-2013 datatable

我需要创建一个这样的数据表:

Subjects          old        new    diff
Sub_1             10         50     40
Sub_2             30         10     -20
total             40         60     20

这是代码的一部分

DataTable subjects = new DataTable();
subjects.Columns.Add("Subjects");
subjects.Columns.Add("old");
subjects.Columns.Add("new");
subjects.Columns.Add("diff");
subjects.Rows.Add("Sub_1", sub1.Old, sub1.New, (sub1.New - sub1.Old));
subjects.Rows.Add("Sub_2", sub2.Old, sub2.New, (sub2.New - sub2.Old));
subjects.Rows.Add("Total", .. total of above    .. , .. total of above    .., .. total of above  ..);

所以我需要问一下如何计算最后一列的总值(总计),还有其他方法来计算第四列(第三列 - 第二列)

1 个答案:

答案 0 :(得分:1)

首先,您已声明没有DataType的列(感谢@ Steve 以征求意见)。因此,请将Add()方法更改为:

subjects.Columns.Add("old", typeof(Int32));
subjects.Columns.Add("new", typeof(Int32));

此外,您可以像这样设置diff列的值:

subjects.Columns.Add("diff", typeof(Int32), "new - old");

然后,删除Rows.Add方法中的任何其他计算:

subjects.Rows.Add("Sub_1", sub1.Old, sub1.New);
subjects.Rows.Add("Sub_2", sub2.Old, sub2.New);

然后您可以使用DataTable.Compute(string expression, string filter)方法。它计算传递过滤条件的当前行的给定表达式。 在你的情况下,表达式将是Sum(columnName),过滤器将是空字符串,因为你不需要任何过滤器。

subjects.Compute("Sum(old)", "")

因此,请将代码更改为:

subjects.Rows.Add("Total",
                   subjects.Compute("Sum(old)", ""), 
                   subjects.Compute("Sum(new)", ""),
                   subjects.Compute("Sum(diff)", ""));