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

时间:2009-04-12 16:30:26

标签: c# linq-to-sql datagridview

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

这是我到目前为止所拥有的:

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])的datagridview时,我希望将更改发送到数据库。
  2. 从{{1}}删除记录时,我希望它也可以从数据库中删除。
  3. 我显然缺少某种绑定,提交,合并,追加或单元格更改事件处理程序,但我无法弄清楚发送回更改的连接。如果更容易进行所有更改然后点击某种提交按钮将其全部发送回来也很好。

1 个答案:

答案 0 :(得分:1)

您是否尝试为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;
             }
         }
     }
}

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