DataGridView的小数不排序(DataGridView decimal not sortin

2019-10-18 08:35发布

好吧,我有一个正在被数据绑定就像一个DataGridView:

dataGridViewChartOre.AutoGenerateColumns = false;
dataGridViewChartOre.DataSource = xml.GetOreChart();
dataGridViewChartOre.DataMember = "ore";

所有列已经通过UI手动创建。 而列由1串,10位小数。 当最后一列是一个货币。

现在得到一个货币在DataGridView显示为快捷解决一次,我记得从XML输入始终是一个字符串。 使用这种方法:(别的地方找到这个网站)

private void dataGridViewChartOre_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        string value = e.Value.ToString();
        decimal d;

        if (decimal.TryParse(value, out d))
        {
            e.Value = d;
        }
    }

现在得到的小数进行排序,似乎一个更大的问题。 我已经试过了几个建议的解决方案,但是,没有迄今工作。

  • 使用浮动,而不是小数。
  • 利用SortCompare // SortResult

眼下,它按只有它的第一个数字,即所有的小数:

8616
8225
785995
7833
78069
773403
750268
74521
738249
714541
70972
and so on

那么如何解决这个问题,甚至更好,如果有人可以给我为什么它这样做解释?

此外,在一个侧面说明,如何改变CURRENCYSYMBOL? 我想用不同的符号翻过整个程序,但是,它应该保留正规的en-US日期时间格式。

Answer 1:

DataGridView列类型取决于实际类型的基础数据。 你不能改变底层数据,你在改变的类型CellFormatting事件处理程序仅仅是单元格的值。 如果单元格值类型被改变,从而其类型不与所属柱(这是由基础数据确定的)的类型匹配时,就会有一个FormatException抛出。 我猜你的代码(在CellFormatting事件处理程序),如果您添加将抛出该异常e.FormattingApplied = true; 更改单元格的值之后,将实际影响格式化,但你错过了)。

你提到SortCompare事件,并表示,它并没有帮助,但我认为你可能不以正确的方式使用它。 我试过这个解决方案与它和它的工作:

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
   e.SortResult = Compare(e.CellValue1.ToString(), e.CellValue2.ToString());
}
private int Compare(string a, string b)
{
   return decimal.Parse(a).CompareTo(decimal.Parse(b));
}


文章来源: DataGridView decimal not sorting