C# 如何在DataGridView中将字符串排序为数字

C# 如何在DataGridView中将字符串排序为数字,c#,.net,vb.net,sorting,datagridview,C#,.net,Vb.net,Sorting,Datagridview,我在datagridview中有一个带有特定数字的字符串列。它不受约束。我想把它正确地分类。默认DataGridView排序不正确 例如: Dgv将其排序如下: - FS 752/08/2014 - FS 752/06/2015 - FS 751/12/2013 - FS 751/08/2014 - FS 751/06/2015 - FS 752/06/2015 - FS 751/06/2015 - FS 752/08/2014 - FS 751/08/2014 - FS

我在datagridview中有一个带有特定数字的字符串列。它不受约束。我想把它正确地分类。默认DataGridView排序不正确

例如: Dgv将其排序如下:

 - FS 752/08/2014
 - FS 752/06/2015
 - FS 751/12/2013
 - FS 751/08/2014
 - FS 751/06/2015
 - FS 752/06/2015
 - FS 751/06/2015
 - FS 752/08/2014
 - FS 751/08/2014
 - FS 751/12/2013
应该是这样的:

 - FS 752/08/2014
 - FS 752/06/2015
 - FS 751/12/2013
 - FS 751/08/2014
 - FS 751/06/2015
 - FS 752/06/2015
 - FS 751/06/2015
 - FS 752/08/2014
 - FS 751/08/2014
 - FS 751/12/2013

如何实现这一点?

正如您所说,您没有使用
数据源,那么您可以尝试使用

当用户单击列以更改排序顺序时,或当您以编程方式调用时,将调用此事件

这是一个基本的例子。我假设您希望排序为年(?)然后是月(?)然后是第一个数字:

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{

    // Check if we are sorting by the special column.
    if (myDataGridView.Columns.Contains("My_Column") && e.Column == myDataGridView.Columns["My_Column"])
    {

        // Parse the special values (add validation if required).
        string[] parts1 = e.CellValue1.ToString().Trim().Split('/');
        int a1 = int.Parse(parts1[0].Split(' ')[2]);
        int b1 = int.Parse(parts1[1]);
        int c1 = int.Parse(parts1[2]);
        string[] parts2 = e.CellValue2.ToString().Trim().Split('/');
        int a2 = int.Parse(parts2[0].Split(' ')[2]);
        int b2 = int.Parse(parts2[1]);
        int c2 = int.Parse(parts2[2]);

        // Compare each value as required.

        // First compare the last value (year?)
        e.SortResult = c1.CompareTo(c2);

        // If equal, then compare second value (month?)
        if(e.SortResult == 0)
            e.SortResult = b1.CompareTo(b2);

        // Finally if still equal, then compare first value
        if(e.SortResult == 0)
            e.SortResult = a1.CompareTo(a2);

    }

}

注意:如果无法确保每个单元格中始终有有效的格式,则需要将验证逻辑添加到此事件中。例如,使用
int.TryParse()
检查
null
值,并验证
字符串的长度
拆分。

尝试制作一个特殊的
比较器
并使用该比较器使用
DataGridView.Sort
方法。例子:太好了!我使用过这个解决方案,只需稍加修改,它就可以完美排序了!我很高兴,谢谢:)