私は自分のプロジェクトでオブジェクト指向を維持するように取り組んできました。現在、プレゼンテーションレイヤーとして機能するWinFormsプロジェクトにすべてのアプリケーションのクラスを提供する.DLLを使用しています。リストをバインドするWinFormコントロール(T)
私の.DLLは、たとえば、フォーム内のコードにSortableBindingList(Of T)を返します。 SortableBindingList(Of T)はhereからです。 SortableBindingList(Of Product)を想定しましょう。 (製品)SortableBindingListを返しServices.Products.GetList()
.DLLの機能は、私は簡単にこれを行うことができますと仮定すると:
DataGridView1.DataSource = Services.Products.GetList()
今、DataGridViewのは、適切に製品の私のリストが取り込まれます。ファイン。しかし、DataGridViewの中で選択された私のオブジェクトを私に戻っています何の.SelectedItemプロパティがありません:
' Doesn't exist!
Dim p As Product = DataGridView1.SelectedItem
' Need to make another DB call by getting the Product ID
' from the proper Cell of the DataGridView ... yuck!
しかし、コンボボックスまたはリストボックスには、実際の店舗ではありませんし、私の製品をそのままオブジェクトを返します。
' Valid!
ComboBox1.DataSource = Services.Products.GetList()
Dim p as Product = ComboBox1.SelectedItem
ただし、ComboBoxとListBoxはProductオブジェクトのすべてのフィールドを表示せず、DisplayMemberプロパティの値のみを表示します。
VB.NET 2008には素晴らしいコントロールがありますが、これは欠落しています。これはオブジェクト指向の機能を提供し、実際にはオブジェクトのフィールド全体を表示し、ユーザーが選択したときにそのオブジェクトを戻しますか?なぜ私はそこにいないだろうかと思っています。
に更新します.SelectedRowsプロパティは、もともとDataGridViewにバインドされていたオブジェクトではなく、DataGridViewRow型のオブジェクトを返します。 – HardCode
答えが更新されました。これを使用してデータにバインドされたオブジェクトにアクセスし、適切にキャストします。 –
ああ、大丈夫です。それは魅力のように働く。ありがとう! – HardCode