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

Database C#:将从DataGridView到BindingList的更改推回到数据库?,database,winforms,datagridview,bindingsource,bindinglist,Database,Winforms,Datagridview,Bindingsource,Bindinglist,我正在使用BindingList在Windows窗体应用程序的DataGridView中显示Person对象的列表。对DataGridView的更改会更改基础BindingList。我让这部分工作 现在,我希望将列表持久化到数据库表中。从数据库中读取列表并填充人员列表是很简单的,但是如果我从DataGridView中添加/编辑/删除人员,我如何以及何时将更改保留回数据库 (其次,这种方法可以吗?或者我遗漏了一些更大的细节?我不想使用数据表,因为我想以一种抽象的面向对象的方式使用我的代码。)为了在

我正在使用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设计器。