如何在DataGridView中使用LINQ to SQL编辑数据库记录?

问题描述:

我对这个很亲近,但我需要一点帮助。我有一个简单的WinForms应用程序,它使用LINQ to SQL来获取需要从数据库中检查的数据并将其填入DataGridView。这部分工作很好,但我似乎无法做出的连接是如何在事情发生变化时将数据返回到数据库中。如何在DataGridView中使用LINQ to SQL编辑数据库记录?

这是我到目前为止有:

db = new SiteDataDataContext(); 
src = new BindingSource(); 
src.DataSource = GetSitesPendingApproval(); // Returns IQueryable<Site>. 
dataGridView1.DataSource = src; 
dataGridView1.AllowUserToDeleteRows = true; 
dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter; 

我有两个动作我希望能够采取:

  1. checkboxboolean价值IsActiveDataGridView.Columns [7])选中/取消选中我想要将更改发送到数据库。
  2. 当从datagridview中删除记录时,我希望它也从数据库中删除。

我明显缺少某种绑定,提交,合并,追加或单元格更改的事件处理程序,但我一直无法找出发送更改的连接。如果更容易做出所有更改,然后点击某种提交按钮将其全部发送回去也没关系。

您是否尝试过为UserDeletingRow事件添加一个事件处理程序,该事件使用行上的id从数据库中删除该行?

private void DataGrid_UserDeletingRow(object sender, 
              DataGridCommandEventArgs e) 
{ 
    TableCell itemCell = e.Item.Cells[0]; // assumes id is in column 0 

    int id = int.Parse(item.Text); // assumes it's non-null 

    using (var dc = new SiteDataDataContext()) 
    { 
     var site = dc.Sites.Where(s => s.ID == id).SingleOrDefault(); 

     if (site != null) 
     { 
      try 
      { 
       dc.Sites.DeleteOnSubmit(site); 
       dc.SubmitChanges(); 
       dataGridView1.Bind(); 
      } 
      catch (SqlException) 
      { 
       e.Cancel = true; 
      } 
     } 
    } 
} 

如果删除失败,您可能还会提供一条错误消息,但如何执行取决于您的应用程序。

+1

并不完全如我所料,必须这样做(认为我会得到更多免费的数据绑定),但这会做到这一点。谢谢。 – 2009-04-13 14:21:59