我有一个带有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属性的游戏,但无法使它工作。
答案 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("£", "")));
}
}