#c# #winforms
#c# #winforms
Вопрос:
Я загружаю csv
файл в элемент управления DataGridView
через WindowsForm
, и он автоматически устанавливает все столбцы в строки, чтобы они были отсортированы в алфавитном порядке.
Столбцы являются
Product description (String)
Item Code (String)
Current Count (Integer)
On Order (String)
Когда Current Count
столбец отсортирован, он идет в таком порядке 1,2,22,3,35,36,4,40 и так далее.
Также эти столбцы и строки не являются жестко запрограммированными, я читаю файл и загружаю его в DataGridView
элемент управления.
Как я могу сделать так, чтобы строки таблицы были отсортированы численно относительно Current Count
значений столбца.
Это код, используемый для ввода файла CSV в DataGridView
private void Form1_Load(object sender, EventArgs e)
{
this.Size = new Size(800, 650);
dataGridView.Size = new Size(440, 550);
dataGridView.Location = new Point(15, 15);
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
string[] dataFile = System.IO.File.ReadAllLines(path);
//File.Copy("C:\StockFile\stocklist.csv", "C:\StockFile\stocklistNew.csv", true);
string[] dataCollection = null;
int x = 0;
foreach (string text_line in dataFile)
{
dataCollection = text_line.Split(',');
if(x ==0)
{
for(int i = 0; i <= dataCollection.Count() -1; i )
{
dataTable.Columns.Add(dataCollection[i]) ;
}
x ;
}
else
{
dataTable.Rows.Add(dataCollection);
}
}
dataGridView.DataSource = dataTable;
this.Controls.Add(dataGridView);
dataGridView.Columns["Item Code"].ReadOnly = true;
dataGridView.Columns["Product Description"].ReadOnly = true;
dataGridView.Columns["On Order"].ReadOnly = true;
}
Комментарии:
1. Какую платформу вы используете? Откуда взялся этот
DataGridView
класс? Многие фреймворки позволяют регистрировать пользовательский компаратор для сортировки столбцов. Вам нужно будет зарегистрировать компаратор, который преобразует строки в числа, а затем сравнивает числа.2. Кроме того, может быть, ваш код написан на C #, а не на C ? В случае, если вы используете Windows Forms DataGridView, здесь есть руководство по выполнению пользовательской сортировки по столбцам: learn.microsoft.com/en-us/dotnet/desktop/winforms/controls /…
3. Да, извините, это c # и Windows forms, я не был уверен, как опубликовать, и я допустил эту ошибку. Я поиграл с этой пользовательской сортировкой, и, похоже, они не работают в моей программе. Я обновил свой код здесь, чтобы показать вам, как загружается моя форма, и мне было интересно, есть ли способ сказать, когда он доберется до столбца «Текущее количество», чтобы он установил typeof на int?? Также я не уверен, ясно ли я это объяснил, но я хочу иметь возможность щелкнуть по заголовку и упорядочить их от наименьшего к наибольшему в значениях int, если это возможно. Спасибо
Ответ №1:
Вы должны установить тип столбца при его создании.
if (dataCollection[i] == "Count") // or "Current Count"
dataTable.Columns.Add(dataCollection[i], typeof(int));
else
dataTable.Columns.Add(dataCollection[i]); // typeof(string) by default
Без явного указания этого типа будет string
.
Комментарии:
1. Большое вам спасибо, Александр, я уже некоторое время страдаю от этого.:)