我在http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.expression(v=VS.90).aspx看到的这个属性,感觉非常有用,不过我有个特殊的应用,不知道怎么写。比如我的表格中,已有一列为“数量”,一共有3行,依次的数据为1、2、3。我增加了一列,用上述属性,如果写成Sum(数量),那么三行的值都是6。而我实际想得到的是依次的累计值,应该分别是1、3(1+2)、6(1+2+3),请问这样的Expression应该怎么写,或者根本是不可能完成的,谢谢。

解决方案 »

  1.   

    这个Expression不可能完成(因为没办法带条件Sum),自己循环一遍就出来了。
      

  2.   

    DataColumn.Expression 不行,因为不支持自定义函数可使用 DataTable.RowChangingeg:
    DataTable dt = new DataTable();
                dt.RowChanged += new DataRowChangeEventHandler(Row_Changing);            dt.Columns.Add(new DataColumn("num"));
                dt.Columns.Add(new DataColumn("custom"));            DataRow dr = dt.NewRow();
                dr[0] = 1;
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr[0] = 2;
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr[0] = 3;
                dt.Rows.Add(dr);private void Row_Changing(object sender, DataRowChangeEventArgs e)
            {
                DataTable dt = sender as DataTable;
                int index = dt.Rows.IndexOf(e.Row);
                if (index > -1)
                {
                    if (e.Row["custom"] == DBNull.Value)
                    {
                        if (index == 0)
                        {
                            e.Row["custom"] = e.Row["num"];
                        }
                        else
                        {
                            int temp, custom;
                            int.TryParse((e.Row["num"] ?? "").ToString(), out temp);
                            int.TryParse((dt.Rows[index - 1]["custom"] ?? "").ToString(), out custom);
                            e.Row["custom"] = custom + temp;
                        }
                    }
                }
            }