MSFflexGrid - Classificando e mesclando dados
O controle MSFlexGrid já foi abordado nos seguintes artigos:
Como sempre há algo novo a aprender , neste artigo vamos mostrar como classificar e mesclar dados no controle FlexGrid.
Adicionando Imagens ao FlexGrid
Você já deve saber que qualquer célula do controle FlexGrid pode conter uma imagem. Para adicionar uma imagem a uma célula você usa a propriedade CellPicture do grid em conjunto com a função LoadPicture.
A sintaxe da propriedade CellPicture é:
object.CellPicture [=picture]
Parte | Descrição |
objecto | O objeto MsflexGrid |
picture | Um arquivo bitmap ( BMP) , icone (ICO) ou metafile (WMF) |
Obs: O funcionamento é idêntico para o controle MSHFlexGrid
Um exemplo de linha de código para carregar uma imagem em uma célula usando a função LoadPicture:
Set FlexGrid1.CellPicture = LoadPicutre(app.path & "\figura.bmp")
Agora um exemplo prático:
Private Sub Form_Click() Grid1.Row = 1 Grid1.Col = 1 Set Grid1.CellPicture = LoadPicture("c:\meus documentos\minhas imagens\boy1.gif") Grid1.Text = "Aluno1" Grid1.Row = 1 Grid1.Col = 2 Set Grid1.CellPicture = LoadPicture("c:\meus documentos\minhas imagens\boy2.gif") Grid1.Text = "Aluno2"
|
Classificando os dados no controle FlexGrid
A classificação dos dados em um controle FlexGrid é feita selecionando a coluna pela qual deseja fazer a classificação e definindo a propriedade Sort da grade para uma constante de classificação do FlexGrid.
As constantes usadas com a propriedade Sort são:
Constante | Valor | Descrição |
FlexSortNone | 0 | Nenhuma Classificação |
FlexSortGenericAscendind | 1 | Classificação na ordem Ascendente(A a Z , 0 a 9 ) |
FlexSortGenericDescending | 2 | Classificação genérica na ordem ascendente |
FlexSortNumericAscending | 3 | Classificação na ordem Ascendente , tratando strings como números |
FlexSortNumericDescending | 4 | Classificação na ordem Descendente , tratando strings como números |
FlexSortStringNoCaseAscending | 5 | Classifica sem levar em conta maiúsculas/minúsculas , ordem Ascendente |
FlexSortNoCaseDescending | 6 | Classifica sem levar em conta maiúsculas/minúsculas , ordem Descendente |
FlexSortStringAscending | 7 | Classifica levando em conta maiúsculas/minúsculas , ordem Ascendente |
FlexSortStringDescending | 8 | Classifica levando em conta maiúsculas/minúsculas , ordem Descendente |
Bem , vamos ver agora como usar essas constantes:
Existem duas técnicas que você pode usar para fazer a classificação no FlexGrid:
1- ) Atribuir um valor da constante , vistas acima para a propriedade Sort:
Private Sub Form_Load() Grid1.ColWidth(0) = 1000 Grid1.ColWidth(1) = 4000 End Sub Private Sub Grid1_Click() |
A seguir o resultado do processamento quando o usuário clica na coluna - Nome:
Neste exemplo estamos carregando os dados da tabela Alunos do banco de dados escola.mdb. O usuário pode escolher entre classificar pelo código ou pelo nome apenas clicando na coluna desejada.
2-) O outro método e esconder a coluna que será usada como critério de classificação. Assim , suponha que você tenha um campo que retorna a data no formato Short Date. Neste caso nenhuma das constantes usadas para classificar irão funcionar. O que fazer então ?
Para classificar pela data teremos que incluir uma coluna com largura igual a zero (tornando-a invisível) e preenchê-la com os valores das datas convertidas para um valor numérico.(DataValue). A seguir basta classificar a coluna. Tudo fica transparente para o usuário. Vamos ao exemplo
Private Sub Command1_Click() Dim Ro As Integer Dim SortCol As Integer Dim SortDate As Double 'inclui a coluna que atuara como a chave de classificação MSFlexGrid1.Cols = MSFlexGrid1.Cols + 1 SortCol = MSFlexGrid1.Cols - 1 MSFlexGrid1.ColWidth(SortCol) = 0 'a coluna invisível 'calcula os novos valores e preenche a coluna For Ro = 1 To MSFlexGrid1.Rows - 1 SortDate = DateValue(MSFlexGrid1.TextMatrix(Ro, 2)) ' define a coluna que será classificada MSFlexGrid1.TextMatrix(Ro, SortCol) = SortDate Next Ro 'efetua a classificacao MSFlexGrid1.Col = SortCol 'define o criterio MSFlexGrid1.Sort = flexSortNumericAscending End Sub |
Veja abaixo o resultado , apos o usuário clicar no botão para classificar por data:
Obs: A função DateValue transforma as datas em valores numéricos e em TextMatrix(Ro, 2) definimos a coluna que será classificada , no caso a coluna 2 ou seja a terceira coluna.
Mesclando os dados nas Células de um Controle FLexGrid
Para pode usar o recurso de mesclar os dados nas células de um controle FlexGrid é preciso fazer a seguinte configuração:
A propriedade MergeCells diz como as células serão mescladas , a sintaxe é a seguinte:
object.MergeCells [=value]
Os possíveis valores para MergeCells são:
Configuração | Valor | Descrição |
flexMergeNever | 0 | Não permite a mesclagem . É valor padrão. |
flexMergeFree | 1 | Permite a mesclagem com o valor na linha ou coluna próxima a ela. |
flexMergeRestricRows | 2 | Mescla os dados apenas pelas linhas |
flexMergeRestricColumns | 3 | Mescla os dados apenas pelas colunas |
flexMergeRestricAll | 4 | Os dados serão mesclados pelas linhas e pelas colunas |
Agora vamos aplicar estes conceitos. Suponha que você tenha os seguintes dados em uma tabela ou uma consulta ( não importa ).;
Dá para perceber que se você mesclar as duas primeiras colunas (nome e materia) os dados poderão ser exibidos de uma maneira mais elegante. Para permitir isto você pode usar o código abaixo:
MSFLexGrid1.MergeCol(0)= True
MSFLexGrid1.MergeCol(1)= True
Agora você pode definir a propriedade MergeCells para efetivamente fazer a mesclagem. Se você definir MergeCells=flexMergeFree , ao mudar as colunas , irá obter diferentes visões dos dados. Vamos mostrar isto em um projeto para não deixar dúvidas ; ao trabalho...
Vamos acessar a tabela Notas do banco de dados Escola.mdb. Este exemplo foi preparado para ilustrar como a mesclagem funciona , você pode alterar os dados conforme o seu caso particular.
- Cmdsql1 - Altera a fonte de dados(Recordsource) exibindo as colunas na seguinte ordem: nome, materia e nota
Private Sub Cmdsql1_Click() Data1.RecordSource = "select nome,materia,nota from notas" Data1.Refresh End Sub |
- Cmdsql2 - Altera a fonte de dados(Recordsource) exibindo as colunas na seguinte ordem: materia, nome e nota
Private Sub Cmdsql2_Click() Data1.RecordSource = "select materia,nome,nota from notas" Data1.Refresh End Sub |
- Cmdsql3 - Altera a fonte de dados(Recordsource) exibindo as colunas na seguinte ordem: nota, nome e materia.
Private Sub Cmdsql3_Click() Data1.RecordSource = "select nota,nome,materia from notas" Data1.Refresh End Sub |
- Cmdmesclar - Realiza a mesclagem das colunas definidas. (Isto é possível pois definimos MergeCells para um valor que permite a mesclagem)
Private Sub Cmdmesclar_Click() Grid1.MergeCol(0) = True Grid1.MergeCol(1) = True End Sub |
No evento Load do formulário insira o seguinte código : ajusta a largura das colunas.
Private Sub Form_Load() Grid1.ColWidth(0) = 2000 Grid1.ColWidth(1) = 1200 Grid1.ColWidth(2) = 900 End Sub |
Agora vamos mostrar o projeto em execução para você entender como funciona:
Tela inicial do sistema | Os dados mesclados - O usuário clicou no botão - Efetuar Mesclagem |
abaixo mais outras visões dos dados obtidas pela mudança das colunas , quando o usuário clica nos botôes de comando que alteram a fonte de dados via instrução SQL.
Estes exemplos foram usados apenas para ilustrar a utilização da mesclagem usando o controle MSFlexGrid . Cabe a você ir além e aplicar os conceitos as suas necessidades.
Até mais ...
José Carlos Macoratti