日期 table 列和与差

Date table column Sum and differencer

我需要制作这样的数据table:

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  ..);

所以我想问一下如何计算最后一列的总值(Total),还有没有其他方法可以计算第 4 列(3rdcol - 2 2nd col)

首先,您声明了没有 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)", ""));