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

时间:2017-03-02 12:47:04

标签: c# winforms sorting datagridview

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

当我使用以下方式对此列进行排序时

dgvDealerPrices.Sort(colPrice, ListSortDirection.Ascending);

它按照这样的价格排序:

10350£
£11294个
£8999个
£9050个
£9,099
£9,099
£9,149
£9199个
£9,199.99
£9200个
£9,299
£9,457.31
£9899个
£9994

显然是因为它正在排序字符串。如何正确排序价格?即小数,但保持字符串格式显示。我有一个关于SortCompare属性的游戏,但无法使它工作。

1 个答案:

答案 0 :(得分:2)

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

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("£", "")));
    }
}