none
关于 datagrid 数字列的排序问题 RRS feed

  • 问题

  • 我发现 datagrid列的排序都是按 string 型进行的,如果是数字型存在排序错误的问题。请问如何让数字列按照数字的形式进行排序。
    • 已移动 Leo Liu - MSFT 2011年9月16日 5:46 Moved for better support. (发件人:Visual C#)
    2011年9月14日 11:01

答案

全部回复

  • 你好!

    排序是取决于你的数据源,如何数据源中列是数值类型那么排序是按照数值进行排的。可能是你定义数据类型时,没有指定字段为数值类型,如 Int, Decimal 等


    知识改变命运,奋斗成就人生!
    2011年9月14日 12:56
    版主
  • 数据源是不是指 ItemSource 里面 class 的属性的类型? 里面的类型的确都是包装过的,请问需要重新实现什么接口或用什么方法,能够自定义排序方式?
    2011年9月15日 2:09
  • 你好!

    是 class 中的属性类型,只要你明确的指定了类型就可以了不需要再自己去实现自定义排序。

    另外你是怎么包装的?难道属性的类型都是 object?


    知识改变命运,奋斗成就人生!
    2011年9月15日 4:28
    版主
  • 我发现 datagrid列的排序都是按 string 型进行的,如果是数字型存在排序错误的问题。请问如何让数字列按照数字的形式进行排序。

    尝试以下任意一种方法:


    1)数字列必须是int或者是数字类型的。请改成此方式。

    2)人为手动创建一个DataTable,创建一个列,类型是double的,然后使用foreach把字符串类型的数值灌入DataTable中然后绑定到dataGrid中即可。


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年9月15日 5:10
  • 你好!

    是 class 中的属性类型,只要你明确的指定了类型就可以了不需要再自己去实现自定义排序。

    另外你是怎么包装的?难道属性的类型都是 object?


    知识改变命运,奋斗成就人生!
    虽然不是object,但的确包装过的类,里面包括了修改前值,修改后值,与值状态等信息。另外,为了该类适应不同的字段,所以的确实际存放的值是object的。这里改为 int 之类不太实际,所以想知道,其排序是如何产生的,从另外一个地方着手。
    2011年9月15日 5:46
  • 你把你具体的一个实体类发出来看看嘛
    知识改变命运,奋斗成就人生!
    2011年9月15日 7:11
    版主
  • 虽然不是object,但的确包装过的类,里面包括了修改前值,修改后值,与值状态等信息。另外,为了该类适应不同的字段,所以的确实际存放的值是object的。这里改为 int 之类不太实际,所以想知道,其排序是如何产生的,从另外一个地方着手。

    有一个方法——

    1)人工增加若干列(不要自动生成)。

    2)把这些object的列的SortMode设置成Programmatic。

    3)然后在事件”Sort_Compare“中进行人工比较:

       void dataGridView1_SortCompare(object senderDataGridViewSortCompareEventArgs e)
            {
                if (e.Column.Name == "你的可以转化成数字的列")
                {
                    e.SortResult = Convert.ToInt32(e.CellValue1).CompareTo(Convert.ToInt32(e.CellValue2));
                }
                else
                {
                    //其余字段按照String排序
                    e.SortResult = string.Compare(e.CellValue1.ToString(), e.CellValue2.ToString());
                }
            }

    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年9月16日 5:51
  • 楼上是Winform的解决方案。

    我以前做过WPF下的解决方案的,你参考下:http://social.msdn.microsoft.com/Forums/en/wpf/thread/a60d179d-082d-44c5-b3a1-340d51d22164

    实现一个 IComparer 接口的CustomSort类, 然后给你绑定 ListCollectionView.CustomSort 就可以了。

     

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年9月16日 16:15
    版主