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

C# 如何使用LINQ to SQL在DataGridView中编辑数据库记录?,c#,linq-to-sql,datagridview,C#,Linq To Sql,Datagridview,我离这件事很近,但我需要一点帮助。我有一个简单的WinForms应用程序,它使用LINQ to SQL从数据库中获取需要检查的数据,并将其填充到DataGridView中。这一部分工作得很好,但我似乎无法建立的联系是,当情况发生变化时,如何将数据恢复到数据库中 以下是我目前掌握的情况: db = new SiteDataDataContext(); src = new BindingSource(); src.DataSource = GetSitesPendingApproval(); //

我离这件事很近,但我需要一点帮助。我有一个简单的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;
db=newsitedatacontext();
src=newbindingsource();
src.DataSource=GetSitesPendingApproval();//返回IQueryable。
dataGridView1.DataSource=src;
dataGridView1.AllowUserToDeleteRows=true;
dataGridView1.EditMode=DataGridViewEditMode.Editonner;
我希望能够采取两项行动:

  • 当选中/取消选中
    布尔值
    复选框
    时,我希望将更改发送到数据库
  • 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;
                 }
             }
         }
    }
    

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

    我不太希望这样做(我想我可以通过数据绑定免费获得更多),但这样就可以了。谢谢。对于WebForms,您可以绑定到一个LinqDataSource,它使您能够更轻松地执行删除操作,尽管我怀疑它的功能与后端的示例类似。我没有看到WinForms的模拟。您有“从行到列获取id”。。。这是如何做到的?@Nathanmakaskle检查行并从包含该行的列中提取id。您必须确保将其包含在网格视图中的(可能是隐藏的)列中。我是否可以从发送方强制转换的行对象中执行此操作?row对象在intellisense上有许多选项(方法和属性),但我没有看到任何可以显示或帮助我获取要更新的行ID的内容。