DataSourceプロパティを設定することにより、DataGridViewコントロールをビジネスオブジェクトのバインディングリストに直接バインドできます。私のビジネスオブジェクトはINotifyPropertyChangedを実装しているため、新しいアイテムがバインディングリストに追加されるか、既存のアイテムが更新されると、DGVが更新されます。
単一のレコードの処理に関しては、ビジネスオブジェクトをテキストボックスやその他の関連するコントロールにバインドできます。
以下のリンクで説明されているように、BindingListから派生し、CustomBindingListクラスを作成して、IBindableの必要なメソッドを実装することもできます。 http://msdn.Microsoft.com/en-us/library/aa480736.aspx ==
あるいは、BindingSourceの使用を推奨する人を見てきました。 BindingSourceのデータソースはビジネスオブジェクトであり、DGVのデータソースはBindingSourceです。
いずれにせよ、BindingSourceに基づくことは私に提供しません:
では、なぜBindingSourceアプローチが推奨されるのですか?
全体像:OOPSの概念とC#は初めてです。データベースアプリケーションの操作。 Winforms。これまでは、DataSet/DataTableアプローチのみを使用してきました。今、私自身のカスタムクラスを作成して使用しようとしています。
通常、マスター/詳細フォームがあります。 DGVの詳細行をクリックすると、そのレコードを別のウィンドウで編集したいと思います。したがって、DGVのその行で表されるリストアイテムのハンドルを取得する必要があります。そのための解決策を見つけようとすると、私はこの点とこの疑問に直面しました。
私がやりたいことを考えると、どちらのアプローチが優れているのか、そしてその理由は何ですか?
私はこれに非常に慣れていないので、ここにいくつかのポインタが本当に役立ちます。
フォーム上の複数のコントロールが同じデータソースを使用する場合は、BindingSourceを使用することをお勧めします( 舞台裏:Windowsフォームデータバインディングの改善 )
設計時:個人的には、コントロールにデータバインディングするときにビジネスオブジェクトからプロパティを選択するときにBindingSourceが非常に役立つと思います。
現在選択されている行へのハンドルを取得するには、bindingSource1.CurrentをMyBusinessObjectとして試してください。
フィルタリングと検索に関して:私はそれが実装されているグリッドにサードパーティのdllを使用しています。申し訳ありませんが、それであなたを助けることはできません。
さまざまなタイプのビジネスオブジェクトのリストを操作するときは、リストを直接使用しないでください
List<IAnimal> animals = new List<IAnimal>();
animals.Add(new Cat());
animals.Add(new Dog());
bindingSource1.DataSource = animals;
代わりに、次のようなBindingListを使用してください。
bindingSource1.DataSource = new BindingList<IAnimal>(animals);
これにより、リスト内のアクセスされたすべてのオブジェクトがIAnimalタイプであることが確認され、いくつかの例外が回避されます。
データソースにバインドすると、一部しか表示されない大きなセットを処理する場合にメリットがあります。たとえば、ここでTelerik ListViewを見ると、 http://www.telerik.com/help/winforms/listview-databinding.html (これらのコンポーネントパッケージは多数ありますが、これは最新のものです。私が使用しているもの)。
ビューは非常に軽量であり、スクロール位置によって、実際に表示する必要のあるオブジェクトを決定できます。したがって、最初の10個のオブジェクトだけを見て、下にスクロールしない場合は、10個だけがバインドされて表示されます。これにより、多くの不要なデータアクセスを回避できる可能性があります。
それらのGridViewは同じように機能します。潜在的に巨大な基礎となるグリッドとは別のグリッドの表示部分があります。
ボーナスとして、フィルタリング、並べ替え、グループ化が可能です。