我只使用一个简单的 DataGridView 来保存一堆数据(有趣的是)。
我在特定列中有小数。但是当按小数列排序时,它的排序是错误的。例如 :
起始顺序可能是:
- 0.56
- 3.45
- 500.89
- 20078.90
- 1.56
- 100.29
- 2.39
结束顺序是:
- 0.56
- 100.29
- 1.56
- 20078.90
- 2.39
- 3.45
- 500.89
正如您所看到的,它从第一个数字开始排序。然后就这样下单了。
我想我可能可以将该列设置为不同的“ColumnType”,这可能会自动执行此操作。但没有“数字”或“小数”列类型。
我在 MSDN 上查找问题,我可以找到可以在 DataGridView 上使用的“排序”方法。但解释有点超出我的理解,并且示例没有使用数字,仅使用文本,所以我不知道应该如何进行切换。
任何帮助将非常感激。
您可以通过使用以下代码在 DataGridView 上添加 SortCompare 事件的处理程序来解决此问题:
private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
if (e.Column.Index == 0)
{
if (double.Parse(e.CellValue1.ToString()) > double.Parse(e.CellValue2.ToString()))
{
e.SortResult = 1;
}
else if (double.Parse(e.CellValue1.ToString()) < double.Parse(e.CellValue2.ToString()))
{
e.SortResult = -1;
}
else
{
e.SortResult = 0;
}
e.Handled = true;
}
}
MSDN 对 SortResult 值有这样的描述:
如果第一个单元格将小于零
在第二个单元格之前排序;零
如果第一个单元格和第二个单元格有
等效值;大于零
是否对第二个单元格进行排序
在第一个单元格之前。
请注意,在我的测试台中,唯一的数字列是第一个(索引为 0),因此这就是我检查列索引的原因。
另外,根据您的需求和数据,您可能需要优化我的代码 - 例如,如果由于某种原因您的列中有非数字数据,我的代码将引发异常。
你可能已经看过了,但是here http://msdn.microsoft.com/en-us/library/ms171608.aspx是有关自定义 DataGridView 排序的 MSDN 页面的链接。正如你所说,他们只处理文本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)