Сайт разработчика Александр Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Как отсортировать слова с числами в ComboBox или ListBox

Если у вас имеется массив строк, которые начинаются с чисел, а за ними идут символы, то сортировка требует некоторой подготовки.

Основной подход такой же, как и раньше: сделать массив значений, отсортировать их, как вы хотите, а затем отображать их в 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#

Реклама