2012-09-17 132 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項目。謝謝! –

相關問題