2009-07-22 34 views
3

誰かがds.hasChanges()が間違っているのにもかかわらず、dsがブレークポイントでチェックしている間に明らかに変更されていますか? 私はかなりしばらくの間、それを見てきたと私は間違っているものを見ることができない....NET DataSet.HasChangesが間違っています

// 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が変更されていますが、HasChangesはまだfalseを返します。

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

乾杯

+0

データテーブルに何が変更されましたか?すなわち、行が確実に更新されていて追加されていませんか? また、dt.Tables ["Data"]。HasChangesがtrueを返しますか? – AdaTheDev

答えて

8

(EndCurrentEditを呼び出して試してみてください):

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

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

またDataTableに任意の未COMMITEDデータをプッシュしますmyBindingSource.EndEdit()を呼び出してみてください。

+1

ブリリアント!どうもありがとう。 +1 –

0

Windowsフォームは、DataSetに.AcceptChanges()の呼び出しをやっていないことがありますか?

編集: そうではありません。次のもの、私のコメントあたり:
1)レコードの変更が修正され、追加/削除されていませんか? DataSet.HasChanges()は何を返しますか?
2)GetChanges()はデータセット内の特定のデータテーブルをどのように返しますか?最初のBindingContextを上

+0

いいえ、私の最初の考えでもありました... –

+0

1.レコードが更新されていないか、または追加されていません。 2.戻り値false 3.データ型のhasChangesはありませんが、nullを返すgetchangesを意味する場合は –

+0

申し訳ありません、はい、私はGetChangesを意味しました。私の編集を修正しました。 – AdaTheDev

関連する問題