如何从列表框 C# Windows 应用程序中获取多个选定值

How to get multiple selected values from listbox C# Windows Application

我在 windows 应用程序中使用 Listbox。列表框有一个多 selection 选项,用户 select 新用户将拥有的所有角色。 我的列表框绑定到数据集。 table 是 Roles,有 ID 列和 Description 列。 当我绑定列表框时,我选择数据源是数据集,显示成员是描述,值成员是ID,selected值是数据集-roles.frolesid

现在当我遍历列表框的 selecteditems 时,我只得到第一个项目的值等等...

我正在尝试为当前 selectedvalue 分配一个整数,以获取要提供给用户的 ID。

 int num = 0;
 foreach (var item2 in lstRoles.SelectedItems)
 {
      num = Convert.ToInt32(lstRoles.SelectedValue);
 }

所以如果我 select 3 个角色,例如 Administrator、Capturer 和 Assessor,我只能看到 Administrator 值。

如何循环访问下一个项目?我什至没有使用

item2 in my code. Could this be utilised?

例如:

第一次迭代:

它只停留在那个 selected 项目上,永远不会移动到下一个项目。

解决了

            int num = 0;
            int count = fRoleIDs.Count;
            while (num != count)
            {
                var item = lstRoles.Items[num] as System.Data.DataRowView;
                int id = Convert.ToInt32(item.Row.ItemArray[0]);
                num += 1;
            }

这将进入列表框的项目并根据索引将项目作为行获取。然后这让我得到了 itemarray,它是 ID 和描述 {0,1}

要在数据源为 DataTable 时获取所选值的列表,您可以使用此代码:

var selectedValues = listBox1.SelectedItems.Cast<DataRowView>()
                             .Select(dr => (int)(dr[listBox1.ValueMember]))
                             .ToList();

但通常 ListBox 控件的项目可能是 DataRowView、复杂对象、匿名类型、主要类型和其他类型。项目的基础价值应根据 ValueMember 计算。

如果您正在寻找适用于不同设置和不同数据源的良好解决方案,您可能会发现 this post 很有帮助。它包含一个扩展方法,其中 returns 项的值。它的工作原理类似于 ListBoxGetItemText 方法。