3

ブレークポイントでチェックしているときにdsに明らかに変更が加えられているにもかかわらず、ds.hasChanges()がfalseになっていることに気付いた人はいますか?私はかなり長い間それを見てきました、そして私は何が悪いのかわかりません...

// connectionstring and command has been set
DataSet ds = new DataSet();
BindingSource myBindingSource = new BindingSource();
SqlDataAdapter dataAdapter1 = new SqlDataAdapter();
dataAdapter1.Fill(ds, "Data");
myBindingSource.DataSource = ds.Tables["Data"];

// then changes made to the datatable on a windows form using bindingnavigator
ds.HasChanges(DataRowState.Modified); // is false

HasChangesを使用して行の後にブレークポイントを設定し、DataSet Visualizerを使用すると、DataSetが実際に変更されたことがわかりますが、HasChangesはfalseを返します。

私は明らかなことを見逃していると確信しています...誰かが私が間違っていることを見ることができますか?

乾杯

4

2 に答える 2

9

最初にBindingContextでEndCurrentEdit()を呼び出してみてください。

DataTable dt = ds.Tables["Data"];
this.BindingContext[dt].EndCurrentEdit();

if(ds.HasChanges(DataRowState.Modified))
{
  // do your stuff here
}

また、myBindingSource.EndEdit()コミットされていないデータをにプッシュするを呼び出してみてくださいDataTable

于 2009-07-22T14:24:03.153 に答える
0

WindowsフォームはDataSetで.AcceptChanges()呼び出しを実行していませんか?

編集: わかりました、そうではありません。次のこと、私のコメントによると:
1)レコードdefは変更されており、単に追加/削除されただけではありませんか?DataSet.HasChanges()は何を返しますか?
2)GetChanges()は、データセット内の特定のデータブルに対して何を返しますか?

于 2009-07-22T14:05:16.207 に答える