Сортировка значений выпадающего списка DataGridView

#c# #visual-studio #sorting #datagridview #datagridviewcomboboxcell

#c# #visual-studio #сортировка #DataGridView #Ячейка DataGridViewComboBox

Вопрос:

я пытался отсортировать некоторые значения, которые я в настоящее время добавляю в ячейку со списком, с помощью цикла, и я использую сортировку с помощью dataview, однако это сортировка только по числу 1 значения и не принимает во внимание остальные числа.

Пример кода:

1

Результат:

2

То, что я пытаюсь получить, — это следующий пример: 1, 10, 100, 200, вместо, 1, 11, 110, 2, 20, 23, 3 и так далее. Если у кого-нибудь есть какие-либо идеи.

Спасибо

Комментарии:

1. Вам нужно выполнить сортировку по значению. Вместо этого ваша программа упорядочивается в алфавитном порядке.

2. @Zeokat Как бы вы это сделали?

Ответ №1:

Вы можете использовать LINQ для сортировки и получения списка «MATERIALPROFILE».

Вот простая демонстрация, в которой выполняется настройка данных combobox.

 List<decimal> datasource = dt.AsEnumerable()
    .OrderBy(r => r.Field<decimal>("MATERIALPROFILE"))
    .Select(r => r.Field<decimal>("MATERIALPROFILE"))
    .ToList();


DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
combo.DataSource = datasource;

dataGridView1.Columns.Add(combo);
 

Обновить:

Изменить предложение OrderBy, например:

 .OrderBy(r => Convert.ToInt32(r.Field<string>("FieldName").Split('x')[0].Trim()))
 

Комментарии:

1. Я получаю ошибку: prnt.sc/wfu4ml Пример кода: prnt.sc/wfu522

2. @StevenLemos Что такое тип «MATERIALPROFILE»? В моем тесте это «десятичное число». Вы можете изменить его до заданного вами типа

3. Поэтому я сохранил их в виде строки, поскольку есть (x), разделяющий некоторые из этих «MATERIALPROFILE». Таким образом, у меня могли бы быть десятичные числа, такие же, как на скриншоте, но у меня также могло быть что-то похожее на это prnt.sc/wgkr4i Я изменил его с десятичного на строковый, однако мне нужно, чтобы он брал первые 2 числа каждой строки и использовал их для сортировки.

4. @StevenLemos первые 2 числа? Сортировать это как 120,150,180,20,200,... ?

5. Извините, я хотел сказать целое число до (x), разделяющего их. Так, например: 10 x 10 // 14 x 14 // 20 x 20 // 60 x 60 // 100 x 100 // 200 x 200 // 300 x 300 и так далее

Ответ №2:

Вы могли бы использовать LINQ:

 DataTable sortedByValue = sortedDT.AsEnumerable()
                   .OrderBy(r=> r.Field<decimal>("MATERIALPROFILE"))
                   .CopyToDataTable();
 

Комментарии:

1. Пробовал использовать его тоже, но я получаю тот же результат (ошибка), что и ответ выше.