ASP:列表框获取选定的项目 - 一个班轮?

问题描述:

我想获得一个asp:ListBox控件的选定项目,并把它们放在逗号分隔的字符串中。有一个更简单的方法来做到这一点然后:ASP:列表框获取选定的项目 - 一个班轮?

foreach (ListItem listItem in lbAppGroup.Items) 
{ 
    if (listItem.Selected == true) 
    { 
     Trace.Warn("Selected Item", listItem.Value); 
    } 
} 

有没有办法让这个成一行?像我这里的伪代码:

string values = myListBox.SelectedItems; 

我使用ASP.NET和C#3.5。

感谢您的任何帮助!

使用LINQ:

string values = String.Join(", ", lbAppGroup.Items.Cast<ListItem>() 
                .Where(i => i.Selected) 
                .Select(i => i.Value)); 
+0

你好,这很好。我试图让它工作,我得到这个问题: 'System.Web.UI.WebControls.ListItemCollection'不包含'Where'的定义并且没有扩展方法'Where'接受类型' System.Web.UI.WebControls.ListItemCollection'可以找到(你是否缺少使用指令或程序集引用?) 我在我的使用语句中有LINQ。 – Jared

+0

@ user993514我忘了转换为'ListItem',试试。 – James

+0

Perfect LINQ再次保存一天。非常感谢你的帮助。 – Jared

我不认为这是建于什么,但你可以做这样的事情:

<asp:ListBox runat="server" ID="listBox" SelectionMode="Multiple"> 
    <asp:ListItem Selected="True" Text="text1" Value="value1"></asp:ListItem> 
    <asp:ListItem Selected="false" Text="text2" Value="value2"></asp:ListItem> 
    <asp:ListItem Selected="True" Text="text3" Value="value3"></asp:ListItem> 
    <asp:ListItem Selected="True" Text="text4" Value="value4"></asp:ListItem> 
</asp:ListBox> 

    IEnumerable<string> selectedValues = from item in listBox.Items.Cast<ListItem>() 
              where item.Selected 
              select item.Text; 

     string s = string.Join(",", selectedValues); 

其实也有一些是建立在:

ListBox.getSelectedItems

http://msdn.microsoft.com/en-us/library/aa297606(v=vs.60).aspx

+1

这是用于Win Forms吗?我似乎无法在ASP.NET中得到这个结果 – Jared

+0

这是一个ASP.NET问题。 –

+0

是的,我的错误。我的开发电脑不在这里,所以我很快加入了链接。尽管有ListBox.GetSelectedIndices。我认为这是getSelectedItems ... – Pleun

var selectedQuery = listBox.Items.Cast<ListItem>().Where(item => item.Selected); 
string selectedItems = String.Join(",", selectedQuery).TrimEnd(); 
+0

'.TrimEnd()'在这里似乎是多余的。如果你想从字符串中删除空格,你应该在第一行,每个项目上做这个操作。 –

+0

第一个查询不检索字符串 –