代码之家  ›  专栏  ›  技术社区  ›  Shrewdroid

在DataView筛选器中使用聚合函数

  •  2
  • Shrewdroid  · 技术社区  · 16 年前

    我有一个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();
    

    但我在应用过滤器时出错。。。 如何获得变量中利润列的总和

    2 回复  |  直到 16 年前
        1
  •  4
  •   fearofawhackplanet    16 年前

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

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

    Compute :

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

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

        2
  •  0
  •   habib    8 年前

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