Получить все выбранные элементы из asp.net ListBox

Кто-нибудь знает о плавном способе получения всех элементов selected в элементе управления списком с помощью методов расширения?

И, пожалуйста, избавьте меня от аргумента, что это не имеет никакого отношения к тому, как получить такой список, потому что в конце все использует цикл для перебора элементов и поиска выбранных в любом случае.

Ответы

Ответ 1

var selected = yourListBox.Items.GetSelectedItems();
//var selected = yourDropDownList.Items.GetSelectedItems();
//var selected = yourCheckBoxList.Items.GetSelectedItems();
//var selected = yourRadioButtonList.Items.GetSelectedItems();

public static class Extensions
{
    public static IEnumerable<ListItem> GetSelectedItems(
           this ListItemCollection items)
    {
        return items.OfType<ListItem>().Where(item => item.Selected);
    }
}

Ответ 2

Метод расширения:

public static List<ListItem> GetSelectedItems(this ListBox lst)
{
    return lst.Items.OfType<ListItem>().Where(i => i.Selected).ToList();
}

Вы можете вызвать его в своем списке, например:

List<ListItem> selectedItems = myListBox.GetSelectedItems();

Вы также можете выполнить преобразование, используя "Cast" в элементах списка, например:

return lst.Items.Cast<ListItem>().Where(i => i.Selected).ToList();

Не уверен, что лучше будет работать OfType или Cast (моя догадка Cast).

Изменить на основе обратной связи Ruben для общего метода ListControl, который действительно сделает его гораздо более полезным методом расширения:

public static List<ListItem> GetSelectedItems(this ListControl lst)
{
    return lst.Items.OfType<ListItem>().Where(i => i.Selected).ToList();
}

Ответ 3

Здравствуйте, я создал одно решение для этой проблемы в этом сообщении с помощью VB.NET:

Получение всех выбранных значений из ASP ListBox

Этот код ниже такой же, как ссылка выше:

Public Shared Function getSelectedValuesFromListBox(ByVal objListBox As ListBox) As String
Dim listOfIndices As List(Of Integer) = objListBox.GetSelectedIndices().ToList()
Dim values As String = String.Empty

For Each indice As Integer In listOfIndices
    values &= "," & objListBox.Items(indice).Value
Next indice
If Not String.IsNullOrEmpty(values) Then
    values = values.Substring(1)
End If
Return values
End Function

Надеюсь, это поможет.