.NET 3.5 Список выбранных значений (Winforms) - PullRequest
2 голосов
/ 09 апреля 2010

Я сражаюсь, чтобы получить выбранные значения (обратите внимание, ЗНАЧЕНИЯ, а не ТЕКСТ) из списка Winforms List, который имеет множественный выбор включен и был привязан к таблице базы данных, получая имя (как DisplayMember) и ID (как ValueMember) Мне нужен идентификатор выбранных предметов.

Элемент управления списка имеет свойства для SelectedValue для получения одного из значений выбранных элементов, но не для всех значений выбранных элементов.

Свойство SelectedItems возвращает Listbox.SelectedObjectCollection, из которого, как мне кажется, я не могу извлечь ЗНАЧЕНИЯ предметов.

Пожалуйста, помогите! Благодаря.

Ответы [ 3 ]

4 голосов
/ 09 апреля 2010

Попробуйте привести каждого object в коллекции к желаемому type. Например, если мои предметы имеют тип Customer, я мог бы сделать что-то вроде этого ...

var selected = listBox1.SelectedItems;

foreach ( var item in selected )
{
    var singleCustomer = (Customer)item;
}

Теперь вы можете получить любую недвижимость из Customer.

.

Это всего лишь тривиальный пример, но я уверен, что вы можете применить концепцию к вашей проблеме.

ОБНОВЛЕНИЕ (после того, как вопрос был обновлен, чтобы указать, что список привязан к таблице):

Если вы привязаны к DataTable, вы можете попробовать что-то вроде этого (опять же, тривиально, но полезно):

var selected = listBox1.SelectedItems;

foreach ( var item in selected )
{
    var itemArray = ( (DataRowView)item ).Row.ItemArray;

    var name = itemArray[0];
    var id = itemArray[1];
}
3 голосов
/ 09 апреля 2010

SelectedItems - это то, что вы хотите.

SelectedItem и SelectedValue отличаются только при установке DisplayMember и ValueMember. Я не думаю, что это поддерживается для Multi-Select.

Какие типы элементов вы добавляете в список?

0 голосов
/ 17 июня 2013

Элемент [0] будет «ValueMember», а элемент [1] будет «DisplayMember». Предполагая, что поле «ID» OP является целым числом, попробуйте следующее:

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];
}
...