在DataView过滤器中使用聚合函数

时间:2010-05-24 10:37:42

标签: c# datatable dataview aggregate-functions filter

我有一个DataTable,它有一列(“Profit”)。我想要的是获得此表中所有值的总和。我试着用以下方式做到这一点......

DataTable dsTemp = new DataTable();

dsTemp.Columns.Add("Profit");

DataRow dr = null;

dr = dsTemp.NewRow();
dr["Profit"] = 100;
dsTemp.Rows.Add(dr);

dr = dsTemp.NewRow();
dr["Profit"] = 200;
dsTemp.Rows.Add(dr);

DataView dvTotal = dsTemp.DefaultView;
dvTotal.RowFilter = " SUM ( Profit ) ";

DataTable dt = dvTotal.ToTable();

但是我在应用过滤器时遇到错误... 如何在变量

中获得Profit列的总和 谢谢......

2 个答案:

答案 0 :(得分:3)

将数据列设置为数字类型(int,decimal,whatever):

DataColumn col = new DataColumn("Profit", typeof(int));
dsTemp.Columns.Add(col);

使用Compute

int total = dsTemp.Compute("Sum(Profit)", "");

请注意,聚合不是一种过滤器,这是您正在使用的方法的主要问题。

答案 1 :(得分:0)

我按照建议使用了DataTable的Compute方法,并且工作正常。我应用了与DataView相同的过滤器(该过滤器用于在数据网格中显示排序和过滤的数据)以及聚合函数。

string SingleVocheridSale ="1";

 DataView view = new DataView(dt);
 view.RowFilter = string.Format("VOCHID='" + SingleVocheridSale + "'");
 dataGridview1.DataSource = view;
 object sumObject;
 sumObject = dt.Compute("Sum(NETAMT)", view.RowFilter);
 lable1.Text = sumObject.ToString();