15

DataSourceプロパティを設定することにより、DataGridViewコントロールをビジネスオブジェクトのバインディングリストに直接バインドできます。私のビジネスオブジェクトはINotifyPropertyChangedを実装しているため、新しいアイテムがバインディングリストに追加されるか、既存のアイテムが更新されると、DGVが更新されます。

単一レコードの処理に関しては、ビジネスオブジェクトをテキストボックスやその他の関連するコントロールにバインドできます。

以下のリンクで説明されているように、BindingListから派生し、CustomBindingListクラスを作成して、IBindableの必要なメソッドを実装することもできます。http: //msdn.microsoft.com/en-us/library/aa480736.aspx

あるいは、BindingSourceの使用を推奨する人を見たことがあります。BindingSourceのデータソースはビジネスオブジェクトであり、DGVのデータソースはBindingSourceです。

いずれにせよ、BindingSourceに基づくことは私に提供しません:

  1. フィルタリング(フィルターは機能しません)。実装は私が提供する必要があります。
  2. 並べ替えと検索が機能しません。実装は私が提供する必要があります。

では、なぜBindingSourceアプローチが推奨されるのでしょうか。

全体像:オブジェクト指向の概念とC#は初めてです。データベースアプリケーションの操作。Winforms。これまでのところ、DataSet/DataTableアプローチのみを使用してきました。今、私自身のカスタムクラスを作成して使用しようとしています。

通常、マスター/詳細フォームがあります。DGVの詳細行をクリックすると、そのレコードを別のウィンドウで編集したいと思います。したがって、DGVのその行で表されるリストアイテムのハンドルを取得する必要があります。そのための解決策を見つけようとすることで、私はこの点とこの疑問に直面しました。

私がやりたいことを考えると、どちらのアプローチが優れているのか、そしてその理由は何ですか?

私はこれに非常に慣れていないので、ここにいくつかのポインタが本当に役立ちます。

4

3 に答える 3

3

フォーム上の複数のコントロールが同じデータソースを使用する場合は、BindingSource を使用することをお勧めします (舞台裏: Windows フォーム データ バインディングの改善) 。

設計時: 個人的には、BindingSource は、コントロールにデータ バインドするときにビジネス オブジェクトからプロパティを選択するときに非常に役立ちます。

現在選択されている行へのハンドルを取得するには、bindSource1.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 型であることが確認され、いくつかの例外が節約されます。

于 2012-04-23T22:18:48.687 に答える
1

DataSource にバインドすると、一部のみが表示される大きなセットを処理するときに利点が得られます。たとえば、ここで Telerik ListView を見ると、http: //www.telerik.com/help/winforms/listview-databinding.html (これらのコンポーネント パッケージは多数ありますが、これは私が少しずつ使用している最新のものです。から)。

ビューは非常に軽量で、実際に表示する必要があるオブジェクトをスクロール位置で決定できます。したがって、最初の 10 個のオブジェクトだけを見て、下にスクロールしないと、10 個だけがバインドされて表示されます。これにより、多くの不要なデータ アクセスが回避される可能性があります。

それらの GridView は同じように機能します。潜在的に巨大な基礎となるグリッドとは別の、グリッドの表示部分があります。

おまけとして、フィルタリング、ソート、グループ化ができます。

于 2012-05-11T01:44:54.610 に答える
-2

私の知る限り、データベースを使用している場合は、データベースとコントロールの間に双方向のブリッジを確立するために、中央でbindingSourceを使用します。それ以外の場合は、 bindingListをコントロールのソースとして使用できます。

于 2014-01-15T04:04:45.373 に答える