/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Если у вас имеется массив строк, которые начинаются с чисел, а за ними идут символы, то сортировка требует некоторой подготовки.
Основной подход такой же, как и раньше: сделать массив значений, отсортировать их, как вы хотите, а затем отображать их в ComboBox или ListBox. Единственное реальное изменение в способе сортировке элементов. Следующий код показывает, как программа использует LINQ для выполнения своей магии. Предположим, что записи имеют форму "10 - Начало Решения проектирования баз данных", т.е. сначала идет числовое значение, затем следует пробел и затем текст.
private void Form1_Load(object sender, EventArgs e)
{
// Зададим массив строк в нужной форме
string[] values =
{
"1 - C# 24-Hour Trainer",
"2 - Visual Basic 24-Hour Trainer",
"3 - WPF Programmer's Reference",
"10 - Beginning Database Design Solutions",
"11 - Visual Basic 2010 Programmer's Reference",
"100 - Visual Basic 2008 Programmer's Reference",
"12 - Visual Basic 2005 Programmer's Reference",
"105 - Expert One-on-One Visual Basic Design and Development",
"13 - Microsoft Office Programming: A Guide for Experienced Developers",
"20 - Visual Basic .NET and XML",
"22 - Visual Basic Graphics Programming",
"202 - Bug Proofing Visual Basic",
"30 - Visual Basic Algorithms"
};
// Сортируем в нужном виде
var sort_query =
from value in values
orderby int.Parse(value.Split(' ')[0])
select value;
// Выводим результат
cboBooks.DataSource = sort_query.ToArray();
lstBooks.DataSource = sort_query.ToArray();
}
Запрос рассматривает элементы в массиве значений. Разбор элементов идет по выражению int.Parse (value.Split ('') [0]), которое разбивает строки по пробелу и берет первую часть. Это будет цифровая часть в начале строки. Далее анализируем это значение как целое число, чтобы использовать в запросе числовые значения, а не в алфавитном порядке.
Оператор select просто выбирает все значения. Код заканчивается вызовом метода ToArray(), чтобы скопировать выбранные элементы в нужном порядке в массив. Сохраняем результат в ComboBox и ListBox через свойства DataSource.
Источник: BLOG.CSHARPHELPER.COM: Sort partly numeric items in a ComboBox or ListBox in C#