15

DataGridViewWindows フォーム アプリでカスタム コレクションを表示したいと考えています。このカスタム コレクションはICollection、および を実装しIEnumerableます。BindingSourceコレクションを .DataSource プロパティとして使用して、 を設定しました。は、 DataSource であるDataGridViewため、my を使用するように設定されています。メソッドBindingSourceを使用してコレクションに新しいアイテムを追加すると、新しいアイテムで正しく更新されます。一方、DataSource は次のことを行いません。BindingSource.Add()DataGridViewBindingSource

MyCustomCollection myCollection = new MyCustomCollection();

myCollection.Add(myCustomObject1);
myCollection.Add(myCustomObject2);

myBindingSource.DataSource(myCollection);
myBindingSource.Add(myCustomObject3);

上記のコードでは、myBindingSource の内部 List には適切な数のレコード (3) が含まれており、これにDataGridViewも 3 つのレコードが含まれていますが、myCollection には 2 つのレコードしか含まれていません。基になる myCollection を変更してもBindingSourceまたは は更新さDataGridViewれないことはわかっていますが、 aを直接更新すると myCollection も同時に更新されるBindingList<T>という印象を受けました。BindingSource

ではないコレクションを使用して、直接BindingList<T>操作するときにコレクションを更新する方法はありますか?BindingSource

Update : すべてのパーツ (Collection、BindingSource、DataGridView) でデータを更新する 1 つの方法は次のとおりです。

myCollection.Add(myCustomObject3);
myBindingSource.DataSource = null;
myBindingSource.DataSource = myCollection;

この問題に対処するためのより良い方法があると確信していますが、これは私が期待していた結果を生成した唯一の方法です。

4

4 に答える 4

3

代わりにそれを実行できないコンテナーを使用する場合、データ ソースの変更後に手動で ResetBindings() を呼び出す必要があります。

http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.resetbindings.aspx

BindingSource にバインドされたコントロールが、リスト内のすべての項目を再読み取りし、表示されている値を更新するようにします。

于 2013-01-28T21:24:27.333 に答える
1

少し前にこの問題に遭遇したと思います-コードのファイルを検索しましたが、これが私にとってはうまくいった解決策だと思います。

        // Applies pending changes to the underlying data source.
        this.bindingSource1.EndEdit();

これは、保存ボタンのクリック ハンドラーのコンテキストにありました。

于 2013-01-28T22:37:39.393 に答える