【问题标题】:Using Aggregate functions in DataView filters在 DataView 过滤器中使用聚合函数
【发布时间】:2010-05-24 10:37:42
【问题描述】:

我有一个包含一列(“利润”)的数据表。我想要的是获得此表中所有值的总和。我尝试通过以下方式执行此操作...

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

但我在应用过滤器时遇到错误... 如何获得变量中利润列的总和

谢谢...

【问题讨论】:

    标签: c# datatable dataview aggregate-functions filter


    【解决方案1】:

    将数据列设置为数字类型(int、decimal 等):

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

    使用Compute:

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

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

    【讨论】:

      【解决方案2】:

      我按照建议使用了 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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-08
        • 1970-01-01
        • 1970-01-01
        • 2021-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多