处理 ObservableCollection 中的更改
本文关键字:ObservableCollection 处理 | 更新日期: 2023-09-27 18:35:02
我在datagridView中处理数据修改几乎没有问题。我将数据源绑定到数据网格视图,如下所示:
private void Form1_Load(object sender, EventArgs e)
{
var customersQuery = new ObservableCollection<Payment>(context.Payments);
customersQuery.CollectionChanged += new NotifyCollectionChangedEventHandler(customerQuery_Changed);
dataGridView1.DataSource = new BindingSource() { DataSource = customersQuery };
}
OrdersDataModelContainer context = new OrdersDataModelContainer();
我正在处理如下更改:
private void customerQuery_Changed(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
foreach (Payment p in e.NewItems)
{
context.Payments.Add(p);
}
}
if (e.Action == NotifyCollectionChangedAction.Remove)
{
foreach (Payment p in e.OldItems)
{
context.Payments.Remove(p);
}
}
context.SaveChanges();
}
删除作品,但添加得不太好。当我单击新行时调用添加操作 co我收到异常,因为单元格为空。插入结束后,我如何以简单的方式更改行为以调用 Add,并切换到下一行?另一个问题是修改现有数据行。只有在插入新数据后,它们才会在数据库中更新。
任何人都可以给我解决方案或指出我应该在哪里搜索它?
在集合更改时插入新的空元素。在属性上已更改将值插入到元素。
您可以使用
以下类:
public class MyCollection<T> : System.Collections.ObjectModel.ObservableCollection<T>
{
public event CollectionChangeEventHandler RealCollectionChanged;
protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
base.OnCollectionChanged(e);
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add && e.NewItems.Count > 0)
{
this.OnRealCollectionChanged(e.NewItems[0]);
}
}
protected virtual void OnRealCollectionChanged(object element)
{
if (this.RealCollectionChanged != null)
{
this.RealCollectionChanged(this, new CollectionChangeEventArgs(CollectionChangeAction.Add, element));
}
}
}
此事件将在标准事件之后抛出,但这是可以抛出的最新点。