Hoe krijg ik waarden van geselecteerde items in CheckBoxList met foreach in ASP.NET C#?

Ik heb een CheckBoxList zoals deze:

<asp:CheckBoxList ID="CBLGold" runat="server" CssClass="cbl">
    <asp:ListItem Value="TGJU"> TG </asp:ListItem>
    <asp:ListItem Value="GOLDOZ"> Gold </asp:ListItem>
    <asp:ListItem Value="SILVEROZ"> Silver </asp:ListItem>
    <asp:ListItem Value="NERKH"> NE </asp:ListItem>
    <asp:ListItem Value="TALA"> Tala </asp:ListItem>
    <asp:ListItem Value="YARAN"> Sekeh </asp:ListItem>
</asp:CheckBoxList>

Nu wil ik de waarde van de geselecteerde items uit deze CheckBoxList halen met foreach, en de waarden in een lijst plaatsen.


Antwoord 1, autoriteit 100%

Houd er rekening mee dat ik de code liever kort houd.

List<ListItem> selected = CBLGold.Items.Cast<ListItem>()
    .Where(li => li.Selected)
    .ToList();

of met een simpele foreach:

List<ListItem> selected = new List<ListItem>();
foreach (ListItem item in CBLGold.Items)
    if (item.Selected) selected.Add(item);

Als je alleen de ListItem.Valuewilt:

List<string> selectedValues = CBLGold.Items.Cast<ListItem>()
   .Where(li => li.Selected)
   .Select(li => li.Value)
   .ToList();

Antwoord 2, autoriteit 6%

foreach (ListItem item in CBLGold.Items)
{
    if (item.Selected)
    {
        string selectedValue = item.Value;
    }
}

Antwoord 3, autoriteit 5%

Goedemiddag, je kunt altijd een beetje LINQ gebruiken om de geselecteerde lijstitems te krijgen en dan te doen wat je wilt met de resultaten:

var selected = CBLGold.Items.Cast<ListItem>().Where(x => x.Selected);
// work with selected...

Antwoord 4

In navolging van de suggesties hier, heb ik een extensiemethode toegevoegd om een ​​lijst van de geselecteerde items terug te sturen met LINQ voor elk type dat overerft van System.Web.UI.WebControls.ListControl.

Elk ListControl-object heeft een Itemseigenschap van het type ListItemCollection. ListItemCollectiononthult een verzameling van ListItems, die elk een eigenschap Selectedhebben.

C Scherp:

public static IEnumerable<ListItem> GetSelectedItems(this ListControl checkBoxList)
{
    return from ListItem li in checkBoxList.Items where li.Selected select li;
}

Visuele basis:

<Extension()> _
Public Function GetSelectedItems(ByVal checkBoxList As ListControl) As IEnumerable(Of ListItem)
    Return From li As ListItem In checkBoxList.Items Where li.Selected
End Function

Gebruik dan zo in beide talen:

myCheckBoxList.GetSelectedItems()

Antwoord 5

List<string> values =new list<string>();
foreach(ListItem Item in ChkList.Item)
{
    if(Item.Selected)
    values.Add(item.Value);
}

Other episodes