2009-03-04 2 views
0

この質問に対する回答は、「バインドナビゲータを使用しないで型付きデータセットを使用しないでください」となる場合があります。 しかし、私が見ている動作について不思議です。ListBoxの選択がBindingSourceからDataSetへの変更を移動していない

したがって、すべてのコントロールをデータソースエクスプローラからドラッグしたフォームを作成しました。 Binding Navigatorがこの特定のフォームには不適切で不適切なため、バインディングナビゲータを削除しました。 ListBoxを追加し、DataSourceをBindingSourceに設定しました。
ListBoxはバインドされていないことに注意してください.BindingSourceからそのListBox自体を入力するだけです。 私が頼りにしていない魔法によって、ListBox内を移動することはBindingSourceをナビゲートしており、それに応じて他のすべてのコントロールが更新されています。

バインドされたコントロールを変更して、BindingSourceでEndEditを明示的に呼び出してから、テーブルアダプタを通じてDataSourceを更新できます。よく働く。

バインドされたコントロールを変更してListBoxで新しいオプションをクリックすると、変更があるかどうかを確認し、保存するかリセットするかを確認できるようにしたいと考えています。

ここでは私が把握できなかった奇妙な部分があります。

DataSet.HasChangesは、どのイベントにアタッチしても、2番目のListBoxが変更されるまでtrueを返しません。 私は数多くの提案を探して試しましたが、大部分はばかげていましたが、有望に思えるものはいくつか見つかりました。 運がありません。

編集:重要な2回目のクリックではなく、元の(編集した)項目をクリックすると表示されます。

答えて

0

質問をして以来、私はBindingSources、DataSets、TableAdapterについてもう少し詳しく学びました。ここで

はどのような作品です:

private void MyListBox_Click(object sender, EventArgs e) 
    { 
     this.myBindingSource.EndEdit(); 
     if (myDataSet.HasChanges()) 
     { 
      if (MessageBox.Show("Save changes?", "Before moving on", MessageBoxButtons.YesNo) == DialogResult.Yes) 
      { 
       myTableAdapter.Update(myDataSet.myDataTable); 
      } 
      else 
      { 
       myDataSet.RejectChanges(); 
      } 
     } 
    } 
関連する問題