Ordenando a partir da coluna de um DBGrid que possue o foco


Vamos mostrar uma rotina para ordernar a coluna de um DBGrid que possue o foco. Para realizar a ordenação basta por o foco na coluna desejada e chamar a função. Vamos lá...

  1. Inicie um novo projeto no Visual Basic e no formulário padrão inclua os seguintes controles:

Vamos usar a tabela Publishers do banco de dados Biblio.mdb. Para isso defina as seguintes propriedades do controle DATA:

DataBasename = C:\Arquivos de programas\Microsoft Visual Studio\VB98\Biblio.mdb 

RecordsetType = Dynaset

RecordSource = Publishers

 

A aparência do formulário do seu projeto deverá ser a seguinte:

 

1-) Insira o seguinte código no formulário do projeto

Public Sub SortDBGrid(dbg As DBGrid, dat As Data, Optional Ordem As Variant)

'//Ordem: True:Ascendente (predeterminado), False: Descendente

Dim rs As Recordset
Dim Clause As String
Dim FieldName As String
Dim Asc As Boolean
Dim CurrCol As Integer

On Error GoTo SortErr

If IsMissing(Ordem) Then
   Asc = True
Else
   Asc = CBool(Ordem)
End If

CurrCol = dbg.Col
FieldName = dbg.Columns(CurrCol).DataField

If dat.Recordset.Fields(FieldName).Type = dbMemo Then
   MsgBox "Os campos Memos não podem ser ordenados"
   Exit Sub
End If

Screen.MousePointer = vbHourglass
Set rs = dat.Recordset
Clause = "[" + FieldName + "]"

If Not Asc Then
   Clause = Clause + " DESC"
End If

rs.Sort = Clause
Set dat.Recordset = rs.OpenRecordset(rs.Type)

dbg.Col = CurrCol
dbg.SetFocus

Screen.MousePointer = vbDefault
Exit Sub

SortErr:
MsgBox Err.Description

End Sub

2-) No botão de comando  insira o seguinte código:

Private Sub Command1_Click()
  If Option1 Then
     Call SortDBGrid(DBGrid1, Data1, True)
  ElseIf Option2 Then
     Call SortDBGrid(DBGrid1, Data1, False)
  End If
End Sub

O resultado do processamento deverá ser  o seguinte, pondo o foco na coluna Name e selecionando ordem Descendente:

Por hoje é só. Bom proveito...;-)