сортировка по нажатию на заголовке столбца в DataGrid

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
AndrewMarcovich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 05.03.2005 (Сб) 10:29

сортировка по нажатию на заголовке столбца в DataGrid

Сообщение AndrewMarcovich » 27.04.2005 (Ср) 11:02

Есть может код готовый у кого?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 27.04.2005 (Ср) 11:13

только если сортировать исходный рекордсет через SQL:


Код: Выделить всё
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

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 27.04.2005 (Ср) 11:50

Ужас... Вот до чего доходят пользующие стандартный DataGrid...

P.S Вообще-то отсортировать Recordset можно гораздо проще ибо у него есть свойство Sort. Далее - по Help-у.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 27.04.2005 (Ср) 12:02

в моем случае можно более универсально делать сортировку, хотя Sort в простых вариантах никто не отменял :)

AndrewMarcovich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 05.03.2005 (Сб) 10:29

Сообщение AndrewMarcovich » 27.04.2005 (Ср) 12:03

Ладно,спасибо.Начинаю!Скальпель...Тампон... :D


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList