3


バインディングソースにデータを入力しようとすると、エラーが1つ発生します。例外は次のとおりです。

System.IndexOutOfRangeException: Index 0 does not have a value.
   at System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
   at System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 rowIndex)

バインディングソースを埋めるためにジェネリックリストを使用しています。コードは次のようになります、

foreach (listItem)
  {
      BindingSource.Add(listItem);
  }

データソースプロパティをリセットしようとしましたが、それでも同じ問題が発生します。

この問題の解決にご協力ください。

4

5 に答える 5

9

私が理解している限り、BindingSource にデータを入力する必要はありません。バインド先のリストにデータを入力するだけです。それがバインディングの全体的な考え方です。bindingsource を使用してコントロールをデータにバインドします。

その後

myBindingSource.DataSource = listItem;

やります。

また、datagridview を BindingSource にバインドし、BindingSource をリストにバインドする代わりに、datagridview を BindingList にバインドすることもできます。List に似ていますが、IBindingList インターフェイスも実装しています (BindingList オブジェクトを List に設定すると、IBindingList を実装したオブジェクトが返されるため、非常によく似ています)。

そうすることができます:

myDataGridView.DataSource = myBindingList;

myBindingList の項目のプロパティが変更された場合、結果はデフォルトで datagridview に反映されます。コレクションが変更された場合 (いくつかのものが追加または削除された場合)、次を使用して更新できます。

 CurrencyManager cm = (CurrencyManager)this.myDataGridView.BindingContext[myBindingList];
 if (cm != null)
 {
    cm.Refresh();
 }
于 2011-10-12T09:12:40.413 に答える
0

ここでは暗闇で撮影していますが、これが疑似コードであると仮定すると、UI 要素のデータソースをバインディング ソースに設定する必要があります。また、次のようなことを行う方が簡単な場合があります。

var binding = new BindingSource();
binding.DataSource = listItem;
DataGridView.DataSource = binding;

BindingSource に関する詳細については、http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx を参照してください。

于 2011-10-12T09:10:22.837 に答える