2009-08-06 12 views
0

私はデータセットを作成しました。デザイナでは、データベースに存在するリレーションおよび外部キーを作成しました。 基本的に、私は価格表との関係がある製品を持っています。それらが共有するキーフィールドは、価格表のIdProductです。製品のFill/Getでは、私はPriceフィールドを返します。joinとbindingsourceを使用してデータセットを更新していますか?

このテーブルを使用するBindingSourceを使用するDataGridもあります。すべてが正しく表示され、データグリッド内の行をダブルクリックすると、選択したレコードの詳細ビューを含むタブ付きフォームが開きます。
この時点でユーザーはレコードを変更することができ、BindingSourceに適切に伝えられます。問題は、TableAdapterには適切な更新が含まれていないため、結合を使用していないテーブルアダプターを作成したので、データセットでTableAdapter.Updateメソッドを呼び出すことができないことです。

どのようにこの状況に対処するのがベストですか。私は、任意の変更された行を取得することはできません。同時に

:修正

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

は常に

答えて

0

あなたが軌道に乗るには十分です。

更新メソッドを1つにする方法がわからないので、データセット内で「結合」(内部結合)されている2つのテーブルが同時に更新されます。

コントロールがproductosBindingSourceにデータバインドされていても、このバインディングソースは更新されないため、最終的な解決策はデータセットの行を直接使用してから製品と価格のテーブルを個別に更新することでした。それは迷惑な、私はユニークな更新を持っていることを望んでいます。

私のコードは次のとおりです。

これです。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プロパティをチェックします。

BEWARE !!他の厳しい値が変更されているためにrowstateに問い合わせる前に、常にRow.EndEdit()を呼び出してください。rowstateは変更されていません。(元の問題かもしれません)。

変わらない場合は - >何も
削除した場合 - 変更した場合>声明
を削除 - >更新文
追加した場合 - > insert文

あなたが動的にテーブルの列に基づいてSQLを生成することができます。
現在の値と元の値を比較して値を更新する必要があるかどうかを確認することもできます。

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


希望これは、私は全く私を喜ば解決策を見つけていない...

関連する問題