将C#.net DataGridView列排序为十进制

将C#.net DataGridView列排序为十进制,c#,winforms,sorting,datagridview,C#,Winforms,Sorting,Datagridview,我有一个WinForms应用程序,它有一个DataGridView列,在运行时填充价格,价格是字符串数据类型 当我使用以下方法对这些列进行排序时: dgvDealerPrices.Sort(colPrice, ListSortDirection.Ascending); 它将价格分类如下: 10350英镑 11294英镑 8999英镑 9050英镑 9099英镑 9099英镑 9149英镑 9199英镑 9199.99英镑 9200英镑 9299英镑 9457.31英镑 9899英镑 9994英

我有一个WinForms应用程序,它有一个DataGridView列,在运行时填充价格,价格是字符串数据类型

当我使用以下方法对这些列进行排序时:

dgvDealerPrices.Sort(colPrice, ListSortDirection.Ascending);
它将价格分类如下:

10350英镑
11294英镑
8999英镑
9050英镑
9099英镑
9099英镑
9149英镑
9199英镑
9199.99英镑
9200英镑
9299英镑
9457.31英镑
9899英镑
9994英镑


很明显,因为它是对字符串进行排序的。我怎样才能把价格正确地分类?i、 e为小数,但保留所示的字符串格式。我曾尝试过使用SortCompare属性,但无法使其正常工作。

您可以使用自己的比较器:

dgvDealerPrices.Sort(new PriceComparer());

class PriceComparer : IComparer
{
    public int Compare(object x, object y)
    {
        var rowX = (DataGridViewRow)x;
        var rowY = (DataGridViewRow)y;
        var strX = (string)rowX.Cells["colPrice"].Value;
        var strY = (string)rowY.Cells["colPrice"].Value;
        return Decimal.Compare(Decimal.Parse(strX.Replace("£", "")), Decimal.Parse(strY.Replace("£", "")));
    }
}

您可以使用自己的比较器:

dgvDealerPrices.Sort(new PriceComparer());

class PriceComparer : IComparer
{
    public int Compare(object x, object y)
    {
        var rowX = (DataGridViewRow)x;
        var rowY = (DataGridViewRow)y;
        var strX = (string)rowX.Cells["colPrice"].Value;
        var strY = (string)rowY.Cells["colPrice"].Value;
        return Decimal.Compare(Decimal.Parse(strX.Replace("£", "")), Decimal.Parse(strY.Replace("£", "")));
    }
}

可能重复的在DataGridView填充后是否使用按钮以编程方式排序?@Berkay可能重复的在DataGridView填充后是否使用按钮以编程方式排序?@Berkay图例!稍微调整一下,效果不错!我很高兴我帮助了@TomCarroll:)你这个传奇人物!稍微调整一下,效果不错!我很高兴我帮助了@TomCarroll:)