2011-12-12 127 views
9

我想獲得一個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。

感謝您的任何幫助!

回答

14

使用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

4

我不認爲這是建於什麼,但你可以做這樣的事情:

<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); 
1

其實也有一些是建立在:

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

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

'.TrimEnd()'在這裏似乎是多餘的。如果你想從字符串中刪除空格,你應該在第一行,每個項目上做這個操作。 –

+0

第一個查詢不檢索字符串 –

相關問題