I am BATTLING to get the selected values (please note VALUES not TEXT) from a Winforms Listbox that has multi-select enabled and has been bound to a database table getting the Name (as DisplayMember) and ID (as ValueMember) - I need the ID of the selected items.
The listbox control has properties for SelectedValue
to get one of the selected items values, but not for all selected items values.
The SelectedItems
property returns a Listbox.SelectedObjectCollection
from which I cannot seem to extract the VALUES of the items.
Please help! Thanks.
Try casting each object
in the collection to the desired type
. For example, if my items are of type Customer
, I could do something like this...
var selected = listBox1.SelectedItems;
foreach ( var item in selected )
{
var singleCustomer = (Customer)item;
}
Now you can get any property you want from the Customer
.
This is just a trivial example, but I'm sure you can apply the concept to your problem.
UPDATE (after question was updated to indicate the Listbox is bound to table):
If you're bound to a DataTable
, you could try something like this (again, trivial but relevent):
var selected = listBox1.SelectedItems;
foreach ( var item in selected )
{
var itemArray = ( (DataRowView)item ).Row.ItemArray;
var name = itemArray[0];
var id = itemArray[1];
}
SelectedItems is what you want.
SelectedItem and SelectedValue are only different when you set DisplayMember and ValueMember. I don't think this is supported for Multi-select.
What type of Items are you adding to the listbox?
Element [0] will be the "ValueMember", and element [1] will be the "DisplayMember". Assuming the OP's "ID" field is an integer, try the following:
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];
}