2012-09-17 134 views
1

我有一个列表框项目值列表框,如B1,B2,... B7000 ...等。每当项目被附加到列表框时,我需要对整个列表框进行排序。如何对字母数字列表框进行排序?

目前,它们以这种方式排序,B1,B100,B1000,B2,B200等不合逻辑。

我该如何排序才能像B1,B2,B3 ....?

我一直在试图使用LINQ,但它不工作:

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

请帮帮忙!我到处寻找,找不到解决方案!

+2

不要*排序*。您需要选择一个位置来追加或插入一个元素。 – adatapost

回答

3
var list = listBox.Items.Cast<ListItem>() 
      .OrderBy(item => int.Parse(item.Text.TrimStart('B'))); 

listBox.Items.Clear(); 
listBox.Items.AddRange(list.ToArray()); 
+0

谢谢soooo,真的很感激!花了很多时间在上面 - 不知道那很简单! –

+0

我可以问,如果我只需要订购以B开头的项目而忽略其他项目,我会怎么写呢? 即TrimStart('B')所有以B开头的项目,但忽略以'D'开始的项目。 (因为atm,它会失败,如果它试图TrimStart非B项目。谢谢! –

相关问题