.NET 3.5 リストボックスで選択された値 (Winforms)
-
25-09-2019 - |
質問
複数選択が有効になっており、名前(DisplayMemberとして)とID(ValueMemberとして)を取得するデータベーステーブルにバインドされているWinformsリストボックスから選択された値(TEXTではなくVALUESであることに注意してください)を取得しようと戦っています。選択したアイテムのID。
リストボックス コントロールには次のプロパティがあります。 SelectedValue
選択した項目の値の 1 つを取得しますが、選択したすべての項目の値を取得するわけではありません。
の SelectedItems
プロパティは Listbox.SelectedObjectCollection
そこから項目の値を抽出することはできないようです。
助けてください!ありがとう。
解決
それぞれキャストしてみる object
コレクション内で希望の type
. 。たとえば、私のアイテムが次のタイプである場合、 Customer
, 、こんなこともできるのですが…。
var selected = listBox1.SelectedItems;
foreach ( var item in selected )
{
var singleCustomer = (Customer)item;
}
今なら欲しい物件をどこからでも手に入れることができます Customer
.
これはほんの些細な例ですが、この概念を問題に適用できると確信しています。
UPDATE (リストボックスがテーブルにバインドされていることを示すために質問が更新された後):
もしあなたが何かに縛られているなら、 DataTable
, 、次のようなことを試すことができます(これも簡単ですが、関連性があります)。
var selected = listBox1.SelectedItems;
foreach ( var item in selected )
{
var itemArray = ( (DataRowView)item ).Row.ItemArray;
var name = itemArray[0];
var id = itemArray[1];
}
他のヒント
selectedItemsのは、あなたが望むものです。
あなたがDisplayMemberとValueMemberでの設定時にのSelectedItemとSelectedValueのが唯一異なっています。私は、これは、マルチ選択のためにサポートされているとは思いません。
アイテムのどのような種類のあなたがリストボックスに追加されますか?
要素の [0] のは、 "ValueMemberで" になり、素子の [1] のは、 "DisplayMember" であろう。 OPの「ID」フィールドと仮定すると、以下を試してみてください、整数ます:
int selectedCount = lstBxOb10Customer.SelectedItems.Count;
int[] selectedIDs = new int[selectedCount];
string[] selectedNames = new string[selectedCount];
for (int selected = 0; selected < selectedCount; selected++)
{
var itemArray = ( (DataRowView)item ).Row.ItemArray;
selectedIDs[selected] = (int)itemArray[0];
selectedNames[selected] = (string)itemArray[1];
}