2014-04-15 65 views
2

這種情況:在更新到數據庫之前在DataTable中編輯行

我有一個DataGridView鏈接到TableAdapter。由於表的某些列對DataGridView是隱藏的,因此必須在將更改提交到數據庫(其中一些是外鍵)之前添加隱藏列的內容。

我試圖做的是攔截添加的行,將數據添加到相關列,然後繼續提交更改。下面是代碼:

var createdRows = (ExampleDataset.ExampleTableDataTable)this.ExampleDataset.ExampleTable.GetChanges(DataRowState.Added); 
try 
{ 
    if(createdRows != null) 
    { 
     foreach(var row in createdRows) 
     { 
      row.ID_OTHER_TABLE = this.idOtherTable; 
      row.REF_OTHER_TABLE = this.refOtherTable; 
     } 
    } 
    this.exampleTableBindingSource.EndEdit(); 
    this.tableAdapterManager.UpdateAll(this.ExampleDataSet); 
    this.ExampleDataSet.AcceptChanges(); 
} 
catch(Exception ex) 
{ 
    MessageBox.Show("Error updating database: " + ex.Message); 
} 

我可以在另外的看法,通過調試檢查表看,就是添加的行被抓獲,正在編輯的字段,行保存到數據庫中,但foreach()裏面增加的信息沒有被保存。

回答

1

我會回答我自己,但我不能肯定地說,如果這個工程,因爲有項目的變化和組件不再做它的一部分。話雖如此,我認爲這是基於與其他組件類似的用例來完成我想要做的正確方法。

的錯誤是在的TableAdapter的更新方法中用作參數中的對象,作爲一個應使用其上正在作出變化的數據表。也就是說,使用

this.tableAdapterManager.UpdateAll(this.ExampleDataSet) 

它試圖根據DataSet的行當前狀態編寫更改,但更改尚未提交給它。正確的方法應該是:

this.exampleTableTableAdapter.Update(createdRows) 

現在我明白了,這是什麼brinky指出,但早在那一刻我無法看到它不太能夠解決它的代碼。

0

我不知道你在哪裏與修改後的數據表的數據更新實際的數據表 - 要創建一個臨時表,並在其中修改數據,但隨後它不是用來修改實際數據任何地方。

+0

我雖然如此,但如果我嘗試編輯後添加的行回數據表,我得到一個錯誤,該行已經在表中。請幫忙,我知道我很困惑,並且解決方案會變成像一行代碼。 – guillegiraldo

相關問題