解决方案 »

  1.   

      我看了一下,觉得奇怪。
      正常情况下,数据库里也有一些字段是字符型数字,比如学号或手机号,它们往往是字符型或文本型,它们一样也能排序,不会出现你那种情况。
      我看了你的提问后,我建立一个空的vsflexgrid,然后在grid输入带引号的数字,比如"1"、"11"、"4"、"2",再排序,便出现你那种奇怪的现象。
      "4"
      "2"
      "11"
      "1"
      这种情况,需要你预处理字符了,不然,你解决不了排序问题吧。
      如果你的数据保存在数据库里,你先在数据库里查看它们的数据类型,通过sql语句排序,看结果是什么。  我估计,十有八九,你的数据有问题。在装入vsflexgrid前,把它转换成数字型吧,再排序,不会有什么奇怪问题。
      
      

  2.   

      我以前看别人出现过类型现象,实际上,它的数字前后有空格情况等等,排序时就会出现类似情况。
      正常数字(不管是字符型数字型),排序不会有什么奇怪现象。
        比如,你在空的c1flexgrid输入前后带空格的数字,再排序,就会象你那样了。
      4
      2
      11
      1
      

  3.   

    太感谢gzbandit了,这个问题纠结了我很久了,数据库中的字段类型是没有问题,我用的是数据绑定的方式到c1flexgrid上,但始终解决不了这个问题,绑定之后,强制转换为val类型也不能。
    不进行数据绑定,将数据表按行、按列读取出来,请放到表格中去,再排序就可以了。
    with  c1flexgrid1
    .Rows.Count = Db.Rows.Count + 1
                .Cols.Count = Db.Columns.Count + 1            For i = 0 To .Rows.Count
                    For j = 0 To .Cols.Count
                        If j = 2 Then
                            .Rows(i + 1)(j + 1) = Db.Rows(i)(j)
                        Else
                            .Rows(i + 1)(j + 1) = IIf(Val(Db.Rows(i)(j)) = 0, "", Val(Db.Rows(i)(j)))
                        End If
                    Next
                Next
                .TopRow = 1
    end with
      

  4.   

      这样啊。那么,不要直接绑定,也就是说,要在c1flexgrid属性页指定datamode=0(flexDMFree),不要设置为flexDMBound(0),,也可指定datasource=adodc1(或其它),这样也同样可以排序。
      

  5.   

    为上面修改一下,不要设置为:datamode=flexDMBound(1),这种设置可能是你不能排序的真正原因。