如何在数据表中对包含数字和字符串的列进行排序

时间:2018-01-10 19:08:51

标签: c# datagridview datatable type-conversion

我的dataTable中有一些列由DatagridView查看,其中包含一些整数单元格(正面或负面)以及一些单元格,它们的值无法转换为整数。如,空细胞。如何对这样的列数据进行排序。 我试过了

     dataTable.Columns.Add("ID", typeof(int));

但是这段代码会产生错误,因为某些单元格值无法转换为整数。

简而言之,我需要在数字排序时忽略字符串。

1 个答案:

答案 0 :(得分:-1)

您必须使用object类型而不是特定类型进行比较,并创建自定义比较函数。

例如:

int Compare(object a, object b)
{
    if (a is string && b is string)
    { 
        return ((string)a).CompareTo((string)b);
    }
    if (a is int && b is int)
    {
        return ((int)a).CompareTo((int)b);
    }
    else
    {
        //Maybe here you also would throw an error if a or b was 
        //an unexpected type like DateTime

        return a.ToString().CompareTo(b.ToString());
    }
}

然后使用此比较对网格或列表进行排序。

实施可能比我写的对用户来说更加复杂。

请参阅Natural Sort Order in C#