Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Const VK_SHIFT = &H10
Private Const VK_CONTROL = &H11
Public Sub DataGridSort(ByRef grdX As DataGrid, Optional ByVal Order As Integer = 0)
Dim rs As ADODB.Recordset, SQL As String, Pos1 As Long, Pos2 As Long
Dim FieldName As String
On Error GoTo Error_Sort
If grdX.SelStartCol >= 0 Then
grdX.Col = grdX.SelStartCol
grdX.ClearSelCols
End If
Set rs = grdX.DataSource
If Not rs Is Nothing Then
SQL = rs.Source
FieldName = grdX.Columns(grdX.Col).DataField
Pos1 = InStr(1, SQL, " ORDER BY ", vbTextCompare)
If Pos1 > 0 Then
If GetAsyncKeyState(VK_CONTROL) = 0 Then
If Order = 0 Then
Pos2 = InStr(Pos1 + Len(" ORDER BY "), SQL, FieldName, vbTextCompare)
If Pos2 > 0 Then
If StrComp(LTrim(Mid(SQL, Pos2 + Len(FieldName))), "DESC", vbTextCompare) <> 0 Then
Order = -1
End If
End If
End If
SQL = Left(SQL, Pos1) & "ORDER BY " & FieldName
Else
SQL = SQL & "," & FieldName
End If
Else
SQL = SQL & " ORDER BY " & FieldName
End If
If Order < 0 Then SQL = SQL & " DESC"
rs.Close
rs.Open SQL
rs.Requery
End If
Error_Sort:
End Sub
DataGridSort DataGrid1, 1
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1