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...