我正在尝试将我的Excel应用转移到WPF数据网格。我将输入数据到A列中,并在B列中进行计算,取A列的上一个单元格和当前单元格,并添加B列的上一个单元格。
计算示例:B2 = B1 +(A2-A1)。最好的方法是什么?
我正在尝试将我的Excel应用转移到WPF数据网格。我将输入数据到A列中,并在B列中进行计算,取A列的上一个单元格和当前单元格,并添加B列的上一个单元格。
计算示例:B2 = B1 +(A2-A1)。最好的方法是什么?
class SomeData
{
int A { get; set; }
int B { get; set; }
int AminusB { get { return A - B; } }
}
个人建议,先创建一个代表记录的类,并在该类上实现INotifyPropertyChanged接口。
public class recordObject : INotifyPropertyChanged
{
private int a;
public int A
{
get
{
return a;
}
set
{
a = value;
OnPropertyChanged("A");
}
}
private int b;
public int B
{
get
{
return b;
}
set
{
b = value;
OnPropertyChanged("B");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
然后,在显示数据网格的窗口的代码后台中,您将需要订阅列表中每个对象的PropertyChanged。每当这些属性更改时,您就必须手动计算列值。我知道很糟糕,但它会起作用。
属性更改事件应如下所示:
void recordObject_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
var objectList = DataGrid.ItemsSource as List<recordObject>;
var myRecord = sender as recordObject;
if (objectList != null && myRecord != null)
{
int idx = objectList.IndexOf(myRecord);
// Perform your calculations here using idx to access records before and after the current record
// making sure to check for list boundaries for top and bottom.
// Also note that this will likely kick off cascading event calls so make sure you're only changing
// the previous or following record object.
}
}
public static void recordObject_PropertyChanged(object sender, PropertyChangedEventArgs e)
record.PropertyChanged += new PropertyChangedEventHandler(recordObject.recordObject_PropertyChanged);