I am sure you probably use foreach loop something like
List<ListItem> selectedList = new List<ListItem>();
foreach(ListItem li in cbList.Items)
{
if (li.Selected)
selectedList.Add(li);
}
Or advance user use the functionality of C#2.0 using yield keyword
And now using LINQ C#3.0private IEnumerable<ListItem> GetSelectedItems(ListControl listControl)
{
foreach (ListItem itm in listControl.Items)
{
if (itm.Selected)
yield return itm;
}
}
.
.
.
.
.
.
{
IEnumerable<ListItem> selectedList = new List<ListItem>();
selectedList = GetSelectedItems(cbList);
}
var selectedItems =
from li in cbList.Items.Cast<ListItem>()
where li.Selected == true
select li;
The only difference is the Cast, we need to make ListItemCollection generic so we can use it in LINQ query.
And now lets see using Lambda Expression C#3.0
List<ListItem> selectedItems =
cbList.Items.Cast<ListItem>()
.Where(item => item.Selected == true).ToList();
Here also we did cast to get the extension method Where. And in Where condition we write the lambda expression instead of anonymous delegate function.
We can even write extension method on base class ListControl so we can have selected items for all the list control. Lets write one extension method on ListControl
public static List<ListItem> SelectedItems(this ListControl lc)
{
List<ListItem> selectedItems =
lc.Items.Cast<ListItem>()
.Where(item => item.Selected == true).ToList();
return selectedItems;
}
And get the selected items using our extension method we will just call the SelectedItems method.
CheckBoxList cbList = new CheckBoxList();
cbList.SelectedItems();
1 comment:
if we change text in lisitemcollection then it change the checkbox list items also.
How we can fetch the checklist selected items without applying loop.
Post a Comment