Min*_*ata 8 c# datagridview winforms
我只使用一个简单的DataGridView来保存一堆数据(搞笑).
我在特定列中有小数.但是当按照那个十进制列排序时,它会错误地命令它.例如 :
开始订单可能是:
结束顺序是:
如您所见,它从第一个数字开始对其进行排序.然后以这种方式命令它.
我想可能我可以将列设置为不同的"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;
}
}
Run Code Online (Sandbox Code Playgroud)
从MSDN有SortResult值的这种描述:
如果第一个单元格将在第二个单元格之前排序,则小于零; 如果第一个单元格和第二个单元格具有等效值,则为零 如果第二个单元格将在第一个单元格之前排序,则大于零.
请注意,在我的测试床中,唯一的数字列是第一列(索引为0),这就是我对列索引进行检查的原因.
此外,根据您的需求和数据,您可能需要优化我的代码 - 例如,如果由于某种原因您的列中包含非数字数据,我的代码将抛出异常.
您可能已经看过了,但这里有一个指向MSDN页面的链接,用于自定义DataGridView排序.如你所说,他们只处理文本.
我有同样的问题.我尝试使用David Hall提到的事件处理程序.我在定义DataGridView时使用了ValueType属性.它现在作为双精度排序,不需要自定义事件处理程序代码
dataGridView1.Columns[int index].ValueType = typeof(double);
Run Code Online (Sandbox Code Playgroud)
您也可以使用格式化列
dataGridView2.Columns[int index].DefaultCellStyle.Format = string format;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11893 次 |
| 最近记录: |