Database C#:将从DataGridView到BindingList的更改推回到数据库?
我正在使用BindingList在Windows窗体应用程序的DataGridView中显示Person对象的列表。对DataGridView的更改会更改基础BindingList。我让这部分工作 现在,我希望将列表持久化到数据库表中。从数据库中读取列表并填充人员列表是很简单的,但是如果我从DataGridView中添加/编辑/删除人员,我如何以及何时将更改保留回数据库Database C#:将从DataGridView到BindingList的更改推回到数据库?,database,winforms,datagridview,bindingsource,bindinglist,Database,Winforms,Datagridview,Bindingsource,Bindinglist,我正在使用BindingList在Windows窗体应用程序的DataGridView中显示Person对象的列表。对DataGridView的更改会更改基础BindingList。我让这部分工作 现在,我希望将列表持久化到数据库表中。从数据库中读取列表并填充人员列表是很简单的,但是如果我从DataGridView中添加/编辑/删除人员,我如何以及何时将更改保留回数据库 (其次,这种方法可以吗?或者我遗漏了一些更大的细节?我不想使用数据表,因为我想以一种抽象的面向对象的方式使用我的代码。)为了在
(其次,这种方法可以吗?或者我遗漏了一些更大的细节?我不想使用数据表,因为我想以一种抽象的面向对象的方式使用我的代码。)为了在Windows窗体中轻松持久化对象,您可以使用,它完全满足您的需要,并且当您希望从数据库中收集对象时,它还会具体化对象 举个简单的例子,从数据库模式为受支持的数据库(即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,根据您的更改更新和删除语句。在某些任务中,反射和属性可能很有用,因此您可以存储对象,而无需自己编写查询,而是自动生成查询。然而,你为什么要重新实现轮子呢?很好。我刚刚发现的一个实际原因是,由于我使用的是VisualStudio2010Express,我认为SQL server数据库不支持LINQtoSQL设计器。