2016-11-26 1 views
1

Я заселять ListBox в приложении WinForms, таким образом:Как получить выбранные значения для нескольких выбранных элементов в ListBox, привязанных к базе данных?

listBoxUsers.DataSource = ctx.Users.ToList(); 
listBoxUsers.DisplayMember = "Name"; 
listBoxUsers.ValueMember = "Id"; 

как получить выбранные Идентификаторы, когда я устанавливаю SelectionMode к MultiSimple Я хочу сделать foreach петлю на них, как это:

foreach(var itemId in listBoxUsers.SelectedValues)//unfortunately not exist 
{ 
    int id = int.Parse(itemId); 
    // . . . 
} 

ответ

1

Поскольку вы знаете тип элементов, вы можете использовать такой код:

var selectedValues = listBox1.SelectedItems.Cast<User>().Select(x=>x.Id).ToList(); 

Сторона Примечание: Контрольный пункт ListBox не имеет метода GetItemValue. Метод, который должен работать как GetItemText, но для получения значений. В linked post я использовал метод расширения, чтобы получить значение из элемента. Используя этот метод расширения, вы можете получить выбранные значения независимо от типа товаров:

var selectedValues = listBox1.SelectedItms.Cast<object>() 
          .Select(x => listBox1.GetItemValue(x)).ToList(); 
+0

Убедитесь, что вы читаете сайт записку и связанный пост. Это более длинный ответ, но он более общий. –

+0

Кстати, если вы нашли [связанный ответ] (http://stackoverflow.com/a/38305363/3110834) полезным, было бы здорово, если бы вы проголосовали. Это не обязательно, но он делает связанный ответ более популярным и более полезным для будущих читателей. –

0

Вы пытались использовать свойство SelectedItems?

foreach (var item in listBoxUsers.SelectedItems) 

{

}

0

попробовать это:

foreach (DataRowView item in listBoxUsers.SelectedItems) 
      { 
       int id=int.parse(item[0].ToString()); 
      } 
+1

Элементы, используемые OP, имеют тип 'User', они не являются' DataRowView'. –