2012-04-22 2 views
13

DataSourceプロパティを設定することで、DataGridViewコントロールをビジネスオブジェクトのバインディングリストに直接バインドできます。私のビジネスオブジェクトはINotifyPropertyChangedを実装しているので、DGVは新しい項目がBinding Listに追加されるか、既存の項目が更新されたときに更新されます。バインディングリスト<business obj>をデータソースとしてバインディングソースを使用する利点は何ですか?

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

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

また、私が見てきた人々がのBindingSourceを使用することをお勧めします。 BindingSourceのデータソースはビジネスオブジェクトであり、DGVのデータソースはBindingSourceです。 BindingSourceにそれを基づかいずれの場合においても

は、私を提供していません:

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

なぜ、BindingSourceのアプローチが推奨されるのですか?

広い画像: OOPSの概念とC#の新機能です。データベースアプリケーションの操作。 Winforms。これまでのところDataSet/DataTableのアプローチしか使用していません。今では自分のカスタムクラスを作成して使用しようとしています。

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

私がしたいことを考えれば、どのアプローチがより良いのでしょうか?

ここでは、私が非常に新しくなったので、いくつかの参考になるでしょう。

+0

[C#DataGridView.DataSourceのBindingSourceとの使用の違い]の可能な複製](http://stackoverflow.com/questions/4433281/c-sharp-datagridview-datasource-difference-between-using-bindingsource-and-not ) –

答えて

1

フォーム上の複数のコントロールが同じデータソースを使用する場合のBindingSourceを使用することをお勧めします(Behind the Scenes: Improvements to Windows Forms Data Binding

設計時:へのデータバインディング時に私のビジネス・オブジェクトからプロパティを選択する際に、私は個人的に非常に有用の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型であり、いくつかの例外が保存されます。

0

DataSourceにバインドすると、一部のみが表示される大きなセットを処理する場合にメリットが得られます。たとえば、Telerik ListViewここをクリックしてhttp://www.telerik.com/help/winforms/listview-databinding.html(これらのコンポーネントパッケージがたくさんありますが、これは最新のもので、ビットとピースを使用しています)。

ビューは非常に軽く、実際に表示する必要のあるオブジェクトをスクロール位置で判断できます。したがって、最初の10個のオブジェクトだけを見て、下にスクロールしない場合は、10個しかバインドされて表示されません。これにより、不必要なデータへのアクセスが避けられます。

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

ボーナスとして、フィルタリング、並べ替え、グループ化が行われます。あなたはデータベースで作業している場合

-2

私の知る限りでは、あなたは、データベースと対照との間の二国間のブリッジを確立するために途中でのBindingSourceを使用しています。 の場合は、bindingListを使用してコントロールすることができます。

関連する問題