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