2016-07-11 24 views
1

我在我的Windows应用程序上使用Listbox。列表框有一个多选择选项,用户可以选择新用户将拥有的所有角色。 我的列表框绑定到数据集。该表是Roles,带有ID列和Description列。 当我绑定列表框时,我选择了数据源为数据集,显示成员为描述,值成员为ID,所选值为数据集 - roles.frolesid enter image description here如何从列表框中获取多个选定的值C#Windows应用程序

现在当我循环通过列表框的selecteditems,我只得到第一个项目的值等...

我想分配一个int到当前selectedvalue,以获得ID给用户。

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

因此,如果我选择3个角色,例如Administrator,Capturer和Assessor,我只能看到Administrator值。

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

item2 在我的代码。这可以被利用吗?

例如:

enter image description here

第一次迭代:

enter image description here

它只是停留在所选择的项目,从来没有移动到下一个项目。

+0

您已经在使用它。 “lstRoles.SelectedItems”。如果您运行迭代直到完成,您可以看到“Administrator,Assessor,Capturer” –

+0

实际上不是。当我通过,它保持在管理员 –

+0

尝试“lstRoles.SelectedItems.Count”,它必须是3 –

回答

0

解决它

  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,这是标识和说明{0,1}

+1

ListBox控件的项目可能是DataRowView,复杂对象,匿名类型,主要类型和其他类型。一个项目的基础价值应该基于'ValueMember'来计算。你发现[这篇文章](http://stackoverflow.com/a/38305363/3110834)很有帮助。 –

1

要获得选定值的列表,当数据源是一个DataTable,您可以使用此代码:

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

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

如果您正在寻找适用于不同设置和不同数据源的良好解决方案,您可能会发现this post有帮助。它包含一个返回项目值的扩展方法。它的工作方式为ListBoxGetItemText方法。

相关问题