【问题标题】:Get bound listbox selected values获取绑定列表框选定值
【发布时间】:2013-10-21 01:54:00
【问题描述】:

我认为这很容易,但事实并非如此

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

我为列表框启用了多选

所以我需要获取选定项目的所有且仅选定的值(记住它是绑定的,所以我需要选定的值而不是文本或选定的文本)

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

我试过了,但是没用

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

【问题讨论】:

  • DataSource 怎么样?我们需要您的ListBoxDataSource 的一些信息

标签: c# winforms listbox databound


【解决方案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;
}

【讨论】:

    【解决方案2】:

    假设您的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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多