获取绑定列表框选定值

时间:2013-10-13 10:48:48

标签: c# winforms listbox databound

我认为这很容易,但不是

我有带有绑定列表框的窗体(带有值成员和显示成员)

我启用了列表框的多选项

因此我需要获取所有选定项目的所有选定值(请记住它已绑定,因此我需要所选值而不是文本或选定文本)

所以我可以在其他一些表中插入这些值

我尝试了这个,但它不起作用

 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();
     }
  } 

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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();