#c# #visual-studio #sorting #datagridview #datagridviewcomboboxcell
#c# #visual-studio #сортировка #DataGridView #Ячейка DataGridViewComboBox
Вопрос:
я пытался отсортировать некоторые значения, которые я в настоящее время добавляю в ячейку со списком, с помощью цикла, и я использую сортировку с помощью dataview, однако это сортировка только по числу 1 значения и не принимает во внимание остальные числа.
Пример кода:
Результат:
То, что я пытаюсь получить, — это следующий пример: 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. Пробовал использовать его тоже, но я получаю тот же результат (ошибка), что и ответ выше.