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á...
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...;-)