目前系统的设置方式,我在SelectedRow更改时执行PropertChanged事件
PropertyChanged += Table_PropertyChanged;
private void Table_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// If the Selected row changes..
if (e.PropertyName == nameof(SelectedRow))
{
//some code here
}
}
问题在于,如果它是表格中的底行,则没有任何更新,因为没有选择新行。我想检查一下该行的任何单个元素是否发生变化。
目前,用户与DataView进行交互,DataView绑定到表格' tbl'在幕后。 DataView被称为' dv'。
当用户编辑其中一行中的字段时,我发现正确触发事件的唯一方法如下:
public TableViewModel()
{
PropertyChanged += Table_PropertyChanged;
// Prepare the Dummy DataTable, put it in the main Tbl DataTable
ValsToDummy();
Tbl = Dummy;
Tbl.TableName = "Dummy";
dv.Table = Tbl;
dv.ListChanged += new System.ComponentModel.ListChangedEventHandler(OnListChanged);
}
protected void OnListChanged(object sender, System.ComponentModel.ListChangedEventArgs args)
{
if (args.ListChangedType.ToString() == "ItemChanged")
{
Console.WriteLine("ListChanged:");
Console.WriteLine("\t Type = " + args.ListChangedType);
Console.WriteLine("\tOldIndex = " + args.OldIndex);
Console.WriteLine("\tNewIndex = " + args.NewIndex);
Console.out.writeline("change");
updateTable();
}
}
这个问题是它太容易引发并且经常导致堆栈溢出。 UpdateTable调用查询来更新我的数据库。控制台输出看起来像这样......重复多次直到崩溃
ListChanged:
Type = ItemChanged
OldIndex = -1
NewIndex = 9
ListChanged:
Type = ItemChanged
OldIndex = -1
NewIndex = 9
ListChanged:
Type = ItemChanged
OldIndex = -1
NewIndex = 9
ListChanged:
Type = ItemChanged
OldIndex = -1
NewIndex = 9
ListChanged:
Type = ItemChanged
OldIndex = -1
NewIndex = 9
我目前的解决方法是
if (args.ListChangedType.ToString() == "ItemChanged" && args.OldIndex == args.NewIndex)
答案 0 :(得分:0)
基本上这会像你的其他事件一样工作,你需要为数据表的ColumnChanged事件创建一个事件处理程序,并编写一个处理变化的方法。
DataTable yourTable = new DataTable();
//This is the important step
// add a ColumnChanged event handler for the table.
yourTable.ColumnChanged += new
DataColumnChangeEventHandler(Column_Changed );