2011-12-12 19 views
9

Bir asp: ListBox denetimi seçili öğeleri almaya çalışıyorum ve virgülle ayrılmış bir dizeye koyun.ASP: ListBox Seçilen Öğeleri Al - Tek Liner?

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

bir satır içine bu almak için bir yolu var mı: o zaman bunu yapmanın daha basit bir yolu olmalı var? Buradaki sahte kodumu beğendim:

ASP.NET ve C# 3.5 kullanıyorum.

Yardımlarınız için teşekkürler!

cevap

14

kullanma LINQ:

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

Merhaba, bu harika. Çalışmaya çalışıyorum ve bu sorunu yaşıyorum: 'System.Web.UI.WebControls.ListItemCollection' 'Nerede' ve hiçbir uzantı yöntemi için bir tanım içermiyor 'Nerede' türünün ilk bağımsız değişkenini kabul ediyorum ' System.Web.UI.WebControls.ListItemCollection 'bulunamadı (kullanma yönergesi veya derleme başvurusu eksik misiniz?) Kullanım ifademde LINQ var. – Jared

+0

@ user993514 Oyuncu listesini 'ListItem' olarak unuttum, bunu deneyin. – James

+0

Mükemmel LINQ günü yeniden kaydeder. Yardımın için çok teşekkürler. – Jared

4

ben yerleşik bir şey olduğunu sanmıyorum ama eğer böyle bir şey yapabileceğini:

:

<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

Aslında bir şey var inşa IS ListBox.getSelectedItems

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

+1

Bu, Win Forms için mi? Bu ASP.NET – Jared

+0

içinde görünmüyor gibi görünmüyor Bu bir ASP.NET sorusudur. –

+0

Evet, benim hatam. Gelişim PC'm burada değil, bağlantıyı çok hızlı ekledim. ListBox.GetSelectedIndices olsa da. Ben buSelectedItems olduğunu düşündüm ... – Pleun

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

'.TrimEnd()' Burada gereksiz görünüyor. Boşluğu dize ile kaldırmak istiyorsanız, IMHO bu işlemi ilk satırda, her öğenin üzerinde yapmalısınız. –

+0

ilk sorgu bir dize almıyor –

İlgili konular