2009-08-06 36 views
0

我已經創建了一個數據集,並在設計器中創建了數據庫中存在的關係和外鍵。 基本上,我有一個與價格表有關係的產品。他們分享的關鍵字段是價格表中的IdProduct。在產品的填寫/獲取中,我返回價格字段。使用連接和綁定源更新數據集?

我也有一個DataGrid,它使用一個使用此表的BindingSource。一切都正確顯示,當我雙擊DataGrid中的一行時,然後打開一個選項卡式窗體,其中包含所選記錄的詳細視圖。
此時用戶可以對記錄進行更改,並將其正確傳播回BindingSource。問題是TableAdapter不包含適當的更新,因此我無法使用數據集調用TableAdapter.Update方法,就像我創建不使用連接的tableadapter一樣。

我最好如何處理這種情況。

與此同時,我不能得到任何修改行:

 dTiendasDs.ProductosDataTable modified = (dTiendasDs.ProductosDataTable) 
dTiendasDs.Productos.GetChanges(DataRowState.Modified); 

修改總是空

感謝,

回答

0

我還沒有發現,我高興徹底的解決方案。

我不知道如何在一個更新方法,以便我的兩個表中「加入」(內連接)在數據集中,同時更新。

我有問題,即使控件是databound到productosBindingSource,這個bindingSource沒有更新,所以我最終的解決方案是直接使用數據集的行,然後分別更新產品和價格表。這很煩人,我希望有一個獨特的更新。

我的代碼最後是以下內容。

這個。productosBindingSource.EndEdit();

 dTiendasDs.Productos[0].idZona = 

Convert.ToInt32(zonasCombobox.SelectedValue);

 dTiendasDs.Productos[0].Precio = 

Convert.ToDouble(this.precioTextBox.Text);

 dTiendasDs.Productos[0].EndEdit(); 


     if (dTiendasDs.HasChanges()) 
     { 
      this.productosTableAdapter.UpdateData(dTiendasDs.Productos[0]["nombre"].ToString(), 
       Convert.ToInt32(dTiendasDs.Productos[0]["idZona"]),Convert.ToInt32(dTiendasDs.Productos[0]["idProducto"])); 

      this.preciosTableAdapter.UpdateData(
       Convert.ToInt32(dTiendasDs.Productos[0]["idProducto"]), 
       Convert.ToDouble(dTiendasDs.Productos[0]["precio"]),IdTienda); 
     } 

     this.dTiendasDs.AcceptChanges(); 
0

個人而言,我總是做的所有行一個foreach ..
然後每行我檢查Row.RowState屬性。

請注意!在詢問rowstate之前總是打電話Row.EndEdit(),因爲其他難度值已經改變,行狀態不會被修改..(也許這是您的原始問題)。

如果不變 - >沒什麼
如果刪除 - >刪除語句
如果修改 - > update語句
如果添加 - > insert語句

可以動態地生成基於表中的列的SQL 。
您甚至可以通過比較當前值和原始值來檢查值是否必須更新。

object o1 = pRow[fCol, DataRowVersion.Current]; 
object o2 = pRow[fCol, DataRowVersion.Original]; 


希望這是足以讓你去..