2013-10-13 4 views
0

Я думал, что это легко, но это неПолучить связанный ListBox выбраны значения

У меня есть окна образуют с связанной ListBox (с элементом значения и член дисплея)

Я позволил MULTISELECT для ListBox

так Мне нужно получить все и только выбранные значения выбранных элементов (помните, что они привязаны, поэтому мне нужны выбранные значения, а не текст или выделенный текст)

поэтому я могу вставить эти значения в некоторые другие таблицы

я попытался это, но он не работает

for (int x = 0; x <= listProjects.SelectedItems.Count; x++) 
{ 
    if(listProjects.GetSelected(x) == true) 
    { 
     string d = listProjects.SelectedValue.ToString(); 
     string s = listProjects.SelectedItems[x].ToString(); 

     //listProjects.DisplayMember[x].ToString(); 
     //listProjects.Items[x].ToString(); 
    } 
    } 
+0

Как насчет 'DataSource'? Нам нужна информация о 'DataSource' вашего' ListBox' –

ответ

0

Пусть ваш DataSource имеет тип элемента как ItemType и член значения ItemValue, мы можем отбрасывать каждые выбранные элементы (из object) к этому типу и получить значение, которое вы хотите:

var values = listBox1.SelectedItems.OfType<ItemType>() 
            .Select(item=>item.ItemValue).ToList(); 

вы всегда можете использовать Reflection без знания о подстилающем типе элемента заранее, просто чтобы быть уверенными, что ValueMember является действительным. Однако, я думаю, что это только для справки, не рекомендуется:

var values = listBox1.SelectedItems.OfType<object>() 
        .Select(item=> item.GetType() 
             .GetProperty(listBox1.ValueMember) 
             .GetValue(item, null)).ToList(); 
1

При связывании элементов в ListBox, ListBox.Items бы типа элементов, которые связаны с ним, так что если, мол, ваши детали типа BoundItemType и Value является свойством BoundItemType, вы можете сделать что-то вроде этого:

for (int x = 0; x <= listProjects.SelectedItems.Count; x++) 
{ 
    BoundItemType boundItem = listProjects.SelectedItems[x] as BoundItemType; 
    string selectedValue = boundItem.Value; 
}