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 存储库