C# 设置数据绑定到int类型的DataGridView列

C# 设置数据绑定到int类型的DataGridView列,c#,winforms,C#,Winforms,我正在通过WindowsForm控件将csv文件加载到DataGridView中,它会自动将所有列设置为字符串,以便按字母顺序排序 这些列是 Product description (String) Item Code (String) Current Count (Integer) On Order (String) 当对当前计数列进行排序时,其顺序为1、2、22、3、35、36、4、40,依此类推 此外,这些列和行不是硬编码的,我正在读取文件并将其加载到DataGridView控件中 如

我正在通过
WindowsForm
控件将
csv
文件加载到
DataGridView
中,它会自动将所有列设置为字符串,以便按字母顺序排序

这些列是

Product description (String)
Item Code (String)
Current Count (Integer)
On Order (String) 
当对
当前计数
列进行排序时,其顺序为1、2、22、3、35、36、4、40,依此类推

此外,这些列和行不是硬编码的,我正在读取文件并将其加载到
DataGridView
控件中

如何使表的行相对于
当前计数
列的值进行数字排序

这是用于将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;
}
private void Form1\u加载(对象发送方,事件参数e)
{
该尺寸=新尺寸(800650);
大小=新大小(440550);
位置=新点(15,15);
dataGridView.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells;
string[]dataFile=System.IO.File.ReadAllLines(路径);
//复制(“C:\\StockFile\\stocklist.csv”,“C:\\StockFile\\stocklistNew.csv”,true);
字符串[]数据收集=null;
int x=0;
foreach(数据文件中的字符串文本\行)
{
dataCollection=text_line.Split(',');
如果(x==0)
{

对于(int i=0;i,创建列时必须设置列类型

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

您使用什么框架?该
DataGridView
类来自何处?许多框架允许注册自定义比较器对列进行排序。您必须注册一个比较器,将字符串转换为数字,然后比较数字。此外,c你的代码是C++而不是C++吗?如果你使用Windows窗体DATAGIDVIEW,这里有一个教程,用于在列上进行自定义排序:是的,对不起,是C和Windows窗体,我不知道如何发布,我犯了那个错误。我玩了那些自定义排序,好像它们不在我的程序上工作。我在这里更新了我的代码,向您展示了我的表单是如何加载的,我想知道是否有一种方法可以告诉您何时到达“当前计数”列,以便将typeof设置为int??我也不确定我是否说得很清楚,但我希望能够单击标题,尽可能按int值从最小到最大的顺序排列。非常感谢你,亚历山大,我已经为此困扰了一段时间了。:)