Установка столбца DataGridView, привязанного к типу данных int

#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. Большое вам спасибо, Александр, я уже некоторое время страдаю от этого.:)