DataTable中,想让“单价”列有变化后,“金额”列的值自动变为“单价”列与“数量”列的乘积,应该怎么办呢?

解决方案 »

  1.   

    DataColumn col=DataTable.Cloumns["金额"];
    col.Expression="单价 * 数量";
      

  2.   

    DataTable 数据在什么地方改的,没有操作界面吗...?
      

  3.   

    这个DataTable在dataGridView中改,
    一般情况下我会在CellValueChanged事件中用“dataGridView1.Rows[e.RowIndex].Cells[0].Value”之类的东西来相互计算。但这次的Cells["单价"]在界面中不可更改,所以研究在DataTable中自动计算。
      

  4.   

    更正一下:
    Cells["单价"]也不是在界面中不可更改,而是其的变化不在操作界面中体现,所以好像只能在DataTable中自动计算
      

  5.   

    object o=dt.Compute("","");
      

  6.   

    这个可以设定让DataTable自动算的吧
      

  7.   

     我以前用的是别的控件,也基于gridview的
         如果你用的是CellValueChanged事件的话这个你试试
     DataRow dr = dataGridView1.GetDataRow(e.RowHandle); //得到改变值的行
     dr["单价"] = "单价 * 数量";
      

  8.   


    4楼的回答是可以的,
    DataColumn col=DataTable.Cloumns["金额"];
    col.Expression="单价 * 数量";但好像“Cloumns["金额"];”不会允许在操作界面中更改,
    而实际是要求“金额”可以要求在dataGridView中更改
      

  9.   

    那可以处理DataTable的ColumnChanged事件: void dt_ColumnChanged(object sender, DataColumnChangeEventArgs e)
            {
                if (e.Column.ColumnName == "单价" || e.Column.ColumnName == "数量")
                {
                    e.Row["金额"] = (decimal)e.Row["单价"] * (decimal)e.Row["数量"];
                    this.dataGridView1.UpdateCellValue(index/*金额列的索引*/, this.dataGridView1.CurrentRow.Index);
                }
            }