有没有一种流畅的方式,可以使用扩展方法获取列表框控件中所有所选项?
请不要争论如何获取这样的列表是无关紧要的,因为最终一切都使用循环来迭代项目并找到所选的项目。
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);
}
}
扩展方法:
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();
}
你好,我已经使用VB.NET为这个问题创建了一个解决方案:
下面的代码与上面的链接相同:
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
我希望它能帮到你。
ListBox
替换为ListControl
,这样你的扩展就能适用于所有列表控件,如DropDownList
、CheckBoxList
、RadioButtonList
等等。 - Rubens FariasListItem
对象。 - Rubens Farias