Redimensionando as colunas do DBGRID

Autor: Mário Leite

Dentre os vinculados a banco de dados do VB, DbList, DBCombo e DBGrid, este último (DBGrid) é o controle mais importante no contexto de controle de dados, pois com ele não precisamos de escrever qualquer linha de código para que os dados de uma tabela possam ser apresentados no estilo browse. E, adicionalmente à essa característica deste controle, podemos realizar as transações de Inclusão, Exclusão e Alteração; tudo sem codificar nada! Entretanto, quando os registros da tabela são apresentados na forma tabelar temos uma desagradável surpresa: o VB nos mostra os campos dos registros todos com um mesmo tamanho padrão. Por exemplo, vamos considerar uma tabela de Funcionários com a seguinte estrutura de campos: Matrícula(7), Nome(35), Setor(8), Admissão(10); quando os registros dessa tabela forem exibidos em browse notaremos que o DBGrid nos mostra o campo Matrícula (definido com tamanho 7) do mesmo tamanho do campo “Nome” (definido com tamanho 35), o que significa exibir os nomes “cortados” na grade. Para evitar isso, apresentamos um pequeno programa com uma rotina que redimensiona os campos na grade, de maneira que os tamanhos desses campos possam ser redimensionados dinamicamente. A figura 1 mostra a situação padrão (como o DBGrid apresentaria normalmente os registros); a figura 2 exibe os mesmos registros, porém com os campos perfeitamente redimensionados para os seus respectivos tamanhos, e a figura 3 mostra as duas rotinas do projeto.

Neste nosso exemplo usamos o botão de comando cmdRedimensionar para que o próprio usuário possa redimensionar os campos; esta sistemática de implementação foi usada apenas para que o exemplo ficasse mais didático. Todavia, num projeto mais realista, sugerimos que a rotina que faz o redimensionamento seja colocada no evento Form_Paint() do formulário, tornando o processamento mais transparente e dinâmico. Observem que o segredo está em descobrir, inicialmente, o maior valor do campo “Nome”, que é o que varia muito nos tamanhos dos seus valores; como os outros campos têm tamanho fixo, não foi preciso o loop. E as propriedades do DBGrid e do Controle Data, como foram configuradas? Para o Controle Data: DataBaseName=Nome_do_Banco_de_Dados, e RecordSource=Nome_da_Tabela; para o DBGrid: DataSource=Nome_do_Controle_Data. Só isto!

Figura 1 - Registros em browse na situação padrão do DBGrid

Figura 2 - Registros com os campos (colunas) redimensionados

Figura 3 - As duas rotinas (procedures-eventos) do projeto