2009-07-01 4 views
0

私は自分のプロジェクトでオブジェクト指向を維持するように取り組んできました。現在、プレゼンテーションレイヤーとして機能する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には素晴らしいコントロールがありますが、これは欠落しています。これはオブジェクト指向の機能を提供し、実際にはオブジェクトのフィールド全体を表示し、ユーザーが選択したときにそのオブジェクトを戻しますか?なぜ私はそこにいないだろうかと思っています。

答えて

2

DataGridViewのSelectedRows propertyを探しているようです。あなたはそれをあなたが描写しているものに使うことができるはずです。

これを使用してDataBoundItemを取得し、元のクラスにキャストします。私のようなものを使用することになり、のは、私がバインドされProductオブジェクトのリストを持っていたとしましょう:

Dim p As Product = CType(dataGridView1.SelectedRows(0).DataBoundItem, Product) 
MessageBox.Show(p.Name & " " & p.Price) 

行全体が選択されている場合、これは動作しますが、そうでなければ、null参照の例外を得ることができます。その場合、あなたが経由で現在選択されているセルのrowIndexプロパティを取得することができます:

dataGridView1.SelectedCells(0).RowIndex 

だから、すべて一緒に、これは今のようになります。

If dataGridView1.SelectedCells.Count > 0 Then 
    Dim index as Integer = dataGridView1.SelectedCells(0).RowIndex 
    Dim p As Product = CType(dataGridView1.SelectedRows(index).DataBoundItem, Product) 
    MessageBox.Show(p.Name & " " & p.Price) 
End If 

EDIT:はありませんVB.NET

+0

に更新します.SelectedRowsプロパティは、もともとDataGridViewにバインドされていたオブジェクトではなく、DataGridViewRow型のオブジェクトを返します。 – HardCode

+0

答えが更新されました。これを使用してデータにバインドされたオブジェクトにアクセスし、適切にキャストします。 –

+0

ああ、大丈夫です。それは魅力のように働く。ありがとう! – HardCode

関連する問題