2011-12-12 15 views
9

Sto cercando di ottenere gli elementi selezionati di un asp: controllo ListBox e inserirli in una stringa delimitata da virgole. Deve esserci un modo più semplice per farlo:ASP: ListBox Ottieni elementi selezionati - One Liner?

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

C'è un modo per ottenere questo in una riga? come il mio pseudo codice qui:

string values = myListBox.SelectedItems; 

Sto usando ASP.NET e C# 3.5.

Grazie per qualsiasi aiuto !!

risposta

14

utilizzando LINQ:

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

Ciao, questo è fantastico. Sto cercando di farlo funzionare e ottengo questo problema: 'System.Web.UI.WebControls.ListItemCollection' non contiene una definizione per 'Dove' e nessun metodo di estensione 'Dove' accetta un primo argomento di tipo ' System.Web.UI.WebControls.ListItemCollection 'potrebbe essere trovato (ti manca una direttiva using o un riferimento di assembly?) Ho LINQ nella mia istruzione using. – Jared

+0

@ user993514 Ho dimenticato il cast su 'ListItem', provalo. – James

+0

Perfect LINQ salva di nuovo la giornata. Grazie mille per il vostro aiuto. – Jared

4

Non credo che ci sia qualcosa di costruito in ma si potrebbe fare qualcosa di simile:

<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

In realtà c'è qualcosa di costruito in:

ListBox.getSelectedItems

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

+1

Questo è per Win Forms? Non riesco a raggiungerlo in ASP.NET – Jared

+0

Questa è una domanda ASP.NET. –

+0

Sì, mio ​​errore. Il mio PC di sviluppo non è qui, quindi ho aggiunto il link troppo velocemente. C'è però ListBox.GetSelectedIndices. Ho pensato che fosse getSelectedItems ... – Pleun

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

'. TrimEnd()' sembra ridondante qui. Se vuoi rimuovere gli spazi bianchi dalla stringa, dovresti eseguire questa operazione nella prima riga, su ciascun elemento. –

+0

la prima query non recupera una stringa –

Problemi correlati