C#:将更改从 DataGridView 推送到 BindingList 回数据库?

Posted

技术标签:

【中文标题】C#:将更改从 DataGridView 推送到 BindingList 回数据库?【英文标题】:C#: Pushing changes from DataGridView to BindingList back to database? 【发布时间】:2011-06-06 21:10:47 【问题描述】:

我正在使用 BindingList 在 Windows 窗体应用程序的 DataGridView 中显示 Person 对象列表。对 DataGridView 的更改会更改基础 BindingList。我已经完成了这部分工作。

现在我希望将列表保存到数据库表中。从数据库中读取列表并填充人员列表很简单,但是如果我从 DataGridView 添加/编辑/删除一个人,我如何以及何时将该更改持久化回数据库?

(其次,这种方法是否可行,还是我错过了一些更大的图景?我不想使用数据表,因为我想以抽象的面向对象的方式处理我的代码。)

【问题讨论】:

【参考方案1】:

为了在 Windows 窗体中轻松持久化对象,您可以使用 LINQ2SQL,它完全符合您的要求,并且当您想从数据库中收集对象时,它还会具体化对象。

快速示例,在为支持的数据库(即 SQL Server (Express))从数据库架构创建 linq 上下文后,您只需在表单中创建它的实例,并在对数据进行单原子操作时使用它 - 读取、编辑,写或取消。

  private YourAppContext context;

  private void RenewContext()
  
     context = new YourAppContext();
  

  private void LoadData()
  
    RenewContext();
    DataGridView1.DataSource = context.Articles.OrderByDescending(x => x.DatePosted).Take(10);
  

  private void AcceptButtonPressed()
  
    context.SubmitChanges();
  

  private void CancelButtonPressed()
  
    LoadData();
  

显然您可以通过 BindingSource 传递数据。

【讨论】:

有趣的是,我以前在 ASP.NET 中使用过 Linq2Sql,但在这里使用完全让我无法理解。感谢您指出了这一点!这可能是我决定走的路,尽管我仍然很好奇如何在不使用 linq2sql 的情况下做到这一点。 那么您可能应该自己为您的对象实现 INotifyPropertyChanged,跟踪更改的属性(并维护新的和已删除的对象列表)并反转收集数据的逻辑以便能够调用 INSERT, UPDATE 和 DELETE 语句根据您的更改。在其中一些任务中,反射和归因可能有用,因此您将能够存储对象而无需自己编写查询,而是自动生成查询。然而,你为什么要重新实现***? 好点。我刚刚发现的一个实际原因是,由于我使用的是 Visual Studio 2010 express,我认为 Linq to SQL 设计器不支持 sql server 数据库。

以上是关于C#:将更改从 DataGridView 推送到 BindingList 回数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地更改推送到 Bitbucket 上的远程 Git 存储库

有没有办法将更改推送到 AWS Beanstalk,而不是在每次部署时上传整个 zip 文件?

将数据从 Sql Server 推送到桌面应用程序

将本地提交的更改推送到新分支

进行后续更改后如何将最后一次提交推送到 Github?

text 将更改推送到未更新的仓库