在WPF中使用c#从两个单元格中获取值并将其相加并显示在另一个单元格中
本文关键字:单元格 获取 另一个 显示 WPF 两个 | 更新日期: 2023-09-27 18:18:34
我想在网格视图本身内部进行计算。column1和column2显示数据,因此在列3中应该减去column2-column1。Column1和column2仅为手动条目。我的问题是,当数据在两列中输入时,值应该自动反映在第三列中。对此有任何想法,我没有为此尝试任何代码,我正在寻找在哪种情况下我必须编写代码。
这是WPF中常见的场景,最简单的解决方案是在数据类型类中而不是在GridView
中执行计算。在WPF中,我们喜欢创建实现INotifyPropertyChanged
接口的自定义类来保存数据的属性,而不是使用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上的数据绑定概述页面找到更多关于它的信息。
首先需要一个事件侦听器来查看网格视图中的值是否发生了变化
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有一个数据源和值刷新。所以一定要小心。
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;