2009-04-12 40 views
0

我對這個很親近,但我需要一點幫助。我有一個簡單的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中刪除記錄時,我希望它也從數據庫中刪除。

我明顯缺少某種綁定,提交,合併,追加或單元格更改的事件處理程序,但我一直無法找出發送更改的連接。如果更容易做出所有更改,然後點擊某種提交按鈕將其全部發送回去也沒關係。

回答

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; 
      } 
     } 
    } 
} 

如果刪除失敗,您可能還會提供一條錯誤消息,但如何執行取決於您的應用程序。

+1

並不完全如我所料,必須這樣做(認爲我會得到更多免費的數據綁定),但這會做到這一點。謝謝。 – 2009-04-13 14:21:59