偶见识浅,不知道flexgrid使用什么方法排序的,但有你上面的函数来看SGD1_Compare(ByVal Row1 As Long, ByVal Row2 As Long, Cmp As Integer)
两个行号都传了进去,本人推断他用的排序算法可能是选择或冒泡,这也意味着很多无用的列都在进行无用的换位,建议你自己写一个函数,用希尔算法最快,偶以前用javascript时写过一个程序,排序同一个数组,用选择算法花了约30分钟,改成希尔算法只用了29秒。

解决方案 »

  1.   

    如果Mshflexgrid是与数据库绑定的话,偶的排序方法没这么复杂。偶用Select……Order by……语句取得的查询记录集作为Mshflexgrid的数据源,单击Mshflexgrid的表头时,取得被单击的字段,修改Order by子句的参数,查询完毕后再与Mshflexgrid绑定,速度应该比较快。
      

  2.   

    对,如果用recordset绑定,效率最高最省事的了。
      

  3.   

    谢谢大家,另外我发现不必用重新绑定,只需要rs.sort="列名 asc(desc)"即可,当然前提是客户端记录集。
    只不过显示日期列的时候,如果毫秒数不为0,会把毫秒也显示出来,用select convert(varchar,datefield,120) as datefield from table将日期字段转换成字符串形式可以不带毫秒,但是排序又不行了。类似情况还有金额字段显示为1,234.56的时候(带千分位),也是得用convert(varchar,moneyField,1)转换为字符串,排序就会按照字符串形式而不是按照金额,大家有没有好的方法既能排序快又显示正确格式呢?
      

  4.   

    表格控件应该支持格式选择吧,找他的列属性,可以定义格式的,datagrid都可以
      

  5.   

    On Error Resume Next
        Static i As Integer, J As Integer
        Dim K As Integer
        With flex
            If i = .Col Then
                J = IIf(J = 1, 2, 1)
                .Sort = J
            Else
                J = 1
                .Sort = J
            End If
            i = .Col        
        End With