1

在我的 datagridView 中处理数据修改我没有什么问题。我将 DataSource 绑定到 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();
    }

删除作品,但添加不太好。当我单击新行时调用添加操作,因为单元格为空,所以出现异常。如何以简单的方式更改行为以在插入结束后调用 Add 并切换到下一行?另一个问题是对现有数据行的修改。它们仅在插入新数据后才在数据库中更新。

谁能给我解决方案或我应该在哪里搜索它?

4

2 回答 2

1

您可以使用以下类:

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));
        }
    }
}

此事件将在标准事件之后抛出,但这是它可以抛出的最新点。

于 2013-10-11T13:06:22.823 回答
1

在 CollectionChanged 上插入新的空元素。在 PropertyChanged 上向元素插入值。

于 2013-10-11T13:08:12.530 回答