SSDBGrid-Sort By Col

 Public Function SortSSDBGridByCol(ByRef pgrdSource As SSDBGrid, ByVal pgrdSelCol As Integer)
   
    Dim grdBak              As SSDBGrid
    Dim rsGrid              As ADODB.Recordset
    Dim intI                As Integer
    Dim intCol              As Integer

    Dim strColName          As String
   
    Dim strSelColCaption    As String
    Dim strSelColName       As String
    Dim strAddRow           As String

On Error GoTo Error_Handler

    '//
    'Use this function, please set grd.column().DateType
    'String :  DateType=Text
    'Numeric:  DateType=Double
    'Amount :  DateType=Currency   (12,345.03)
    '//
   
    Set grdBak = pgrdSource
    If pgrdSource.Rows = 0 Then
        Exit Function
    End If
   
    strSelColCaption = pgrdSource.Columns(pgrdSelCol).Caption
    strSelColName = UCase(Trim(pgrdSource.Columns(pgrdSelCol).Name))
   
    'Create Record set By ssdbgrid,each record type deply on grid.col.DateType
    Set rsGrid = New ADODB.Recordset
   
    For intI = 0 To pgrdSource.Columns.Count - 1
        strColName = UCase(Trim(pgrdSource.Columns(intI).Name))
        If pgrdSource.Columns(intI).DataType = 8 Then '8:Text
            rsGrid.Fields.Append strColName, adVarChar, 1024
        Else
            rsGrid.Fields.Append strColName, adDouble
        End If
    Next intI

    rsGrid.Open
   
    pgrdSource.Redraw = False
   
    pgrdSource.MoveFirst
   
    For intI = 0 To pgrdSource.Rows - 1
   
        rsGrid.AddNew
        For intCol = 0 To pgrdSource.Cols - 1
            'Amount:123,234.00
            If pgrdSource.Columns(intCol).DataType = 6 Then '6:Currency
                rsGrid.Fields(intCol).Value = Replace(Trim(pgrdSource.Columns(intCol).Value), ",", "")
            Else
                rsGrid.Fields(intCol).Value = Trim(pgrdSource.Columns(intCol).Value)
            End If
        Next intCol
       
        rsGrid.Update
        pgrdSource.MoveNext
    Next
   
    If InStr(1, strSelColCaption, Chr(&HA88B)) Then      '原先Desc-->ASC
        rsGrid.Sort = "[" & strSelColName & "]" & " Asc"
    ElseIf InStr(1, strSelColCaption, Chr(&HA1F8)) Then  '原先ASC -->Desc
        rsGrid.Sort = "[" & strSelColName & "]" & " Desc"
    Else
        rsGrid.Sort = "[" & strSelColName & "]" & " Asc"
    End If
   
    pgrdSource.RemoveAll
   
    Do While Not rsGrid.EOF
   
        For intCol = 0 To rsGrid.Fields.Count - 1
       
            If pgrdSource.Columns(intCol).DataType = 6 Then '6:Currency
                If intCol = 0 Then
                    strAddRow = Format(rsGrid.Fields(intCol).Value, "#,###.###")
                Else
                    strAddRow = strAddRow & vbTab & Format(rsGrid.Fields(intCol).Value, "#,###.###")
                End If
            Else
                If intCol = 0 Then
                    strAddRow = rsGrid.Fields(intCol).Value
                Else
                    strAddRow = strAddRow & vbTab & rsGrid.Fields(intCol).Value
                End If
            End If

        Next intCol
       
        pgrdSource.AddItem strAddRow
       
        rsGrid.MoveNext
    Loop
   
    For intCol = 0 To pgrdSource.Cols - 1
   
        If intCol = pgrdSelCol Then
       
            If InStr(1, strSelColCaption, Chr(&HA88B)) Then      '原先Desc-->ASC "▼"
                pgrdSource.Columns(pgrdSelCol).Caption = Replace(strSelColCaption, Chr(&HA88B), Chr(&HA1F8))
            ElseIf InStr(1, strSelColCaption, Chr(&HA1F8)) Then  '原先ASC -->Desc "▲"
                pgrdSource.Columns(pgrdSelCol).Caption = Replace(strSelColCaption, Chr(&HA1F8), Chr(&HA88B))
            Else
                pgrdSource.Columns(pgrdSelCol).Caption = strSelColCaption & Chr(&HA1F8)
            End If
        Else
       
            '将未选中行恢复Caption
            pgrdSource.Columns(intCol).Caption = Replace(Replace(pgrdSource.Columns(intCol).Caption, Chr(&HA88B), ""), Chr(&HA1F8), "")
        End If
    Next
   
    rsGrid.Close
    Set rsGrid = Nothing
   
    pgrdSource.Redraw = True
   
    Exit Function

Error_Handler:
    DBCloseRS rsGrid
    Set rsGrid = Nothing
    Set pgrdSource = grdBak
    pgrdSource.Redraw = True
    Err.Raise vbObject + 1024, "Sort SSDBGrid", Err.Description
End Function

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值