gpt4 book ai didi

c# - ORM,数据绑定(bind)到 DataGridView : inserting/deleted new rows not saved to the database

转载 作者:行者123 更新时间:2023-11-30 16:31:51 25 4
gpt4 key购买 nike

我对 ORM 很陌生,我目前正在尝试 Telerik OpenAccess ORM,但这个问题实际上可能并不特定于那个 ORM,而且我还没有完全确定那个 ORM。

我想要实现的是绑定(bind)一个 DataGridView 来显示 Customers 对象的集合,显示客户表中的所有客户。

我已将它绑定(bind)到 BindingSource,并将 BindingSource 绑定(bind)到 DataGridView 控件。

我可以成功修改现有项目(使用 OpenAccess ORM 的 SaveChanges 方法)。当我保存时,内容会按我的预期保存回数据库。

但是,如果我从 DataGridView 中删除一行或添加新行,它们不会保存到数据库中,根本没有错误消息或异常。

理想情况下,我希望能够使用 ORM 执行所有可能的 CRUD 操作,就像我能够使用典型的 DataTable 执行此操作一样...

执行绑定(bind)的代码如下所示:

        List<Customer> ukCustomers = (from c in diagrams.Customer
where c.Country == "UK"
select c).ToList();

customersBindingSource.DataSource = ukCustomers;
customersBindingSource.AllowNew = true;

我目前的猜测是用户添加到 DataGridView 的新行不是列表的一部分,而是“独立的”Customer 实例?我本以为它们会自动添加到列表中。删除的行也是如此,我认为它会自动从列表中删除,并且 ORM 中的 SaveChanges 方法能够提取它?

我是否应该做一些不仅仅是绑定(bind)的事情?有没有人在这方面取得过任何成功,总的来说,您使用 WinForms 的数据绑定(bind)体验有多成功,使用您选择的 ORM(不一定是 Telerik 的)?

谢谢。

最佳答案

你的猜测是正确的。您将网格绑定(bind)到一个“独立的”对象列表,虽然每个对象都是 self 跟踪的,但列表不是。这就是为什么对现有对象的更改会按预期工作,但添加/删除不会。

一种解决方案是使用可观察集合而不是标准列表。然后您可以处理相同的绑定(bind),但通过根据需要从上下文中添加/删除项目来响应添加/删除事件。

基本示例:

  private PropertyManagerModel.DemoDBEntityDiagrams context;
public Form1()
{
InitializeComponent();
context = new DemoDBEntityDiagrams();
LoadCommunities();
}

private void LoadCommunities()
{
var communityList = new ObservableCollection<Community>(context.Communities);
communityList.CollectionChanged += new NotifyCollectionChangedEventHandler(communityList_CollectionChanged);
this.dataGridView1.DataSource = new BindingSource() { DataSource=communityList};
}

void communityList_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
context.Add(e.NewItems);

if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
context.Delete(e.OldItems);

context.SaveChanges();
}

据我所知,所有 ORMS 都是这种情况。希望这对您有所帮助!

问候,

约书亚霍尔特

关于c# - ORM,数据绑定(bind)到 DataGridView : inserting/deleted new rows not saved to the database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com