何WinForm制御ドリスト(T)?
-
21-08-2019 - |
質問
取り組んでいつものオブジェクト指向に私のプロジェクト.現在、私が使っている。DLLを供給しているすべてのアプリの授業をサポートプロジェクトとしての発表層である。
My.DLLは、例えば、返SortableBindingList(T)をコードす。のSortableBindingList(T)から こちらの.そういSortableBindingListのです。と仮定します。DLL関数 Services.Products.GetList()
を返しまSortableBindingListの製品が容易にできませ:
DataGridView1.DataSource = Services.Products.GetList()
現在、DataGridViewが適切に人口とマイリストの製品です。ます。しかし、ありません。SelectedItem性に与えるピースブリッジなどの見所も私のオブジェクト"に選定されましたDataGridView:
' 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!
しかし、コンボボックスまたはListBoxは実店舗と返品物をそのままに:
' Valid!
ComboBox1.DataSource = Services.Products.GetList()
Dim p as Product = ComboBox1.SelectedItem
もしかし...コンボボックスに、ListBox示しないすべての分野において製品のオブジェクトの値のみがDisplayMember物件です。
ある素敵な制御VB.NET 2008年という欠け、このオブジェクト指向機能をいれる実際の表示全体のオブジェクトの分野でも返却オブジェクトがユーザが選択した?私ど理由はないと思います。
解決
いるように聞こえるよ、DataGridViewの SelectedRows物件.対応することができるでしょうがいいを記述する.
お使いのDataBoundItemそしてキャストするオリジナルのクラスです。そういった品物を結合として使おうようなもの:
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
編集: 更新VB.NET