我想在网格视图本身内进行计算.column1和column2显示数据,因此在第3列中它应该减去column2-column1.Column1和column2只是手动输入。我的问题是何时输入数据在这两列中,该值应该自动反映在第三列。对此有任何想法,我没有尝试任何代码,我正在寻找我必须编写代码的事件。
答案 0 :(得分:1)
这是WPF中的常见场景,最简单的解决方案是在数据类型类而不是GridView
中执行计算。在WPF中,我们喜欢创建实现INotifyPropertyChanged
interface的自定义类来保存数据的属性,而不是使用DataTable
和这些类的数据绑定集合到ItemsSource
属性。
因此,如果您有一个代表您的数据的类,您可以简单地将另一个属性添加到数据绑定到您的第三列。我们假设您的自定义类属性名为Column1
,Column2
和Column3
。您的属性应如下所示,以自动更新第三列:
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;