MSFlexGrid - Preenchendo com dados , alternando as cores da linhas e ordenando por colunas.

Mais uma vez estamos falando sobre o controle MSFlexGrid . Agora vamos mostrar como preencher uma grade exibindo os dados da tabela Authors do banco de dados pubs do SQL Server 2000.

Primeiro vamos fazer uma conexão ADO com o banco de dados pubs e a seguir invocar a função Enche_Grid que irá preencher o controle MSFlexGrid e alternar a cor da célula pela definição da propriedade - CellBackColor . Usaremos um controle Common Dialog para permitir que o usuário selecione a cor que desejar e a seguir iremos atribuir a cor a célula - .CellBackColor = Comdlg.Color .

Outra funcionalidade implementada é permitir a ordenção pela colune Nome e Sobrenome. Basta o usuário clicar na coluna e a seguir no botão - Exibir os dados - que a ordenação será realizada. Fazemos isto verificando qual coluna foi clicada e gerando um recordset com uma instrução SQL onde a cláusual ORDER BY é definida em função da coluna clicada.

If Grid.Col = 0 Then
.Source = "SELECT AU_Fname as 'Nome',Au_Lname as 'Sobrenome',Phone as 'Telefone' FROM Authors ORDER BY AU_Fname"
ElseIf Grid.Col = 1 Then
.Source = "SELECT AU_Fname as 'Nome',Au_Lname as 'Sobrenome',Phone as 'Telefone' FROM Authors ORDER BY AU_Lname"
Else
.Source = "SELECT AU_Fname as 'Nome',Au_Lname as 'Sobrenome',Phone as 'Telefone' FROM Authors"
End If

1- Inicie um novo projeto no VB e no formulário padrão insira os controles conforme o layout a seguir: (Não esqueça de faze a referência a livraria - ADO.)

2- Insira o código abaixo no evento Click do botão de comando -Exibe os Dados - cmdEncheGrid :
Private Sub cmdEncheGrid_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

With rs
'---> altere aqui a sua conexao <-----'
  .ActiveConnection = "DSN=pubs;UID=sa"
  .LockType = adLockOptimistic
  .CacheSize = 1
  .CursorLocation = adUseClient
  .CursorType = adOpenStatic
 If Grid.Col = 0 Then
   .Source = "SELECT AU_Fname as 'Nome',Au_Lname as 'Sobrenome',Phone as 'Telefone' FROM Authors ORDER BY AU_Fname"
  ElseIf Grid.Col = 1 Then
      .Source = "SELECT AU_Fname as 'Nome',Au_Lname as 'Sobrenome',Phone as 'Telefone' FROM Authors ORDER BY AU_Lname"
  Else
      .Source = "SELECT AU_Fname as 'Nome',Au_Lname as 'Sobrenome',Phone as 'Telefone' FROM Authors"
  End If
.Open
Call Enche_Grid(rs, Me.Grid)
Set .ActiveConnection = Nothing
Set rs = Nothing
End With

End Sub
3- Agora o código da função - Enche_Grid :
Function Enche_Grid(rs As ADODB.Recordset, ctr As MSFlexGrid)

Dim lCols As Long
Dim lRows As Long
Dim lCol As Long
Dim lRow As Long
Dim sColor As String


've se é inicio de arquivo ( BOF)
If (Not (rs.BOF)) Then
 'numero de colunas
 lCols = rs.Fields.Count
 With ctr
    .Cols = lCols
    .Row = 0
    'preenche os cabeçalhos
    For lCol = 0 To lCols - 1
      .Col = lCol
      .Text = rs(lCol).Name
      .ColWidth(lCol) = 1500
    Next
    'pega os dados
    lRow = 1

  Do While Not rs.EOF
   For lCol = 0 To lCols - 1
     .Col = lCol
     .Row = lRow  
     .Text = rs.Fields(lCol).Value
     'alterna a cor das linhas do grid
      If (lRow Mod 2) = 0 Then
         .CellBackColor = vbWhite
      Else
         .CellBackColor = Comdlg.Color
      End If
   Next
   rs.MoveNext
   lRow = lRow + 1
   .Rows = lRow + 1
  Loop
 End With
End If
End Function
4- O código do botão - Define cor da linha :
Private Sub cmdcores_Click()
  Comdlg.ShowColor
End Sub
Ao processar poderemos ter o seguinte resultado: ( definindo a cor de fundo como verde)
Simples !   Até a próxima...