我需要创建一个这样的数据表:
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 ..);
所以我需要问一下如何计算最后一列的总值(总计),还有其他方法来计算第四列(第三列 - 第二列)
答案 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)", ""));