2012-05-21 75 views
4

我想排序列表框中的项目。但是,这样做后,项目值将被设置为项目文本。任何帮助,将不胜感激。使用LINQ对ListBox ListItems进行排序?

lbxCustomers.DataSource = lbxCustomers.Items.Cast<ListItem>().Reverse().ToList(); 
lbxCustomers.DataBind(); 
+0

为什么你不会做这样的客户端? – Tejs

+0

因为我部分使用这个项目来让自己受益。 (更好地理解和使用LINQ。)否则,是的,JQuery一路。 – Ber53rker

+0

如果值是切换位置,则此处发生其他事情。你是说如果你简单地将数据源设置为'lbxCustomers.Items'集合,没有任何变换,它能正常工作吗? – Tejs

回答

3

可能首先,您应该将该列表存储在泛型集合中,然后对其进行排序。这样的事情:

List<ListItem> list = new List<ListItem>(lbxCustomers.Items.Cast<ListItem>()); 
list = list.OrderBy(li => li.Text).ToList<ListItem>(); 
lbxCustomers.Items.Clear(); 
lbxCustomers.Items.AddRange(list.ToArray<ListItem>()); 
+0

这很好。只需要使用.OrderByDescending代替。谢谢! – Ber53rker

0

尝试设置DataSource后重置列表框的DisplayMemberValueMember性能。很多时候,如果一个控件已经绑定,并且您再次设置了DataSource,那么它会丢弃DisplayMember/ValueMember属性。

0

尝试单独分类清单。 在下一步中指定文本值和数据值。 数据绑定控件。