从两个单元格中获取值并将其求和并在WPF中使用C#显示在另一个单元格中

时间:2014-08-19 10:29:14

标签: c# wpf gridview

我想在网格视图本身内进行计算.column1和column2显示数据,因此在第3列中它应该减去column2-column1.Column1和column2只是手动输入。我的问题是何时输入数据在这两列中,该值应该自动反映在第三列。对此有任何想法,我没有尝试任何代码,我正在寻找我必须编写代码的事件。

3 个答案:

答案 0 :(得分:1)

这是WPF中的常见场景,最简单的解决方案是在数据类型类而不是GridView中执行计算。在WPF中,我们喜欢创建实现INotifyPropertyChanged interface的自定义类来保存数据的属性,而不是使用DataTable和这些类的数据绑定集合到ItemsSource属性。

因此,如果您有一个代表您的数据的类,您可以简单地将另一个属性添加到数据绑定到您的第三列。我们假设您的自定义类属性名为Column1Column2Column3。您的属性应如下所示,以自动更新第三列:

public int Column1
{
    get { return column1; }
    set 
    {
        column1 = value; 
        NotifyPropertyChanged("Column1"); 
        NotifyPropertyChanged("Column3"); 
    }
}

public int Column2
{
    get { return column2; }
    set 
    { 
        column2 = value; 
        NotifyPropertyChanged("Column2"); 
        NotifyPropertyChanged("Column3"); 
    }
}

public int Column3
{
    get { return Column2 - Column1; }
}

如果您不熟悉数据绑定,可以从MSDN上的Data Binding Overview页面了解更多信息。

答案 1 :(得分:0)

首先,您需要一个事件监听器来查看网格视图中的值是否已更改

所以

this.mygridview.CellEndEdit += mygridview_CellEndEdit;

然后在事件处理程序

protected void mygridview_CellEndEdit(object_sender, EventArgs e){
int row_changed = this.mygridview.CurrentCell.RowIndex;
int column1_value = Convert.toInt32(this.mygridview.Rows[row_changed].Cells[0]);
int column2_value = Convert.toInt32(this.mygridview.Rows[row_changed].Cells[1]);
this.mygridview.Rows[row_changed].Cells[2].Value = (column2_value - column1_value ).toString;

您需要做的就是检查两列是否都有数字且不为空... 请记住,如果您有一些回发或者如果gridview有一个数据源并且值刷新,那么您的值将被刷新。所以请小心..

答案 2 :(得分:0)

            int row = Convert.ToInt32(grid_calc.SelectedIndex.ToString());
            object value = (this.grid_calc.Items[row] as DataRowView)[2];
            object value1 = (this.grid_calc.Items[row] as DataRowView)[3];
            int a = Convert.ToInt16(value);
            int b = Convert.ToInt16(value1);
            int c = a - b;
            (this.grid_calc.Items[row] as DataRowView)[4] = c;