DBGrid - Revisitado
Atendendo a diversos pedidos retorno ao assunto DBGrid .(Leia também o artigo DBGrid ). O DBGrid é um dos controles que podemos usar para exibir os dados em formato de uma lista , com linhas e colunas, como uma planilha. Para não ser repetitivo procurarei abordar aspectos ainda não tratados relacionados com este controle.
Cabe citar que existem vários controles desenvolvidos por terceiros que possuem mais recursos que o DBGrid. O True DBGrid Pro além de ser totalmente compatível com o DBGrid possui muitos recursos que este não possui.
Na versão 6.0 do VB a versão do DBGrid não é mais instalada automaticamente durante a instalação. Para instalar o controle você deve procurar no CD do Visual Basic - disco 1 - na pasta \COMMON\TOOLS\VB\CONTROLS, e copiar os arquivos DBGRID32.OCX, DBGRID32.DEP E DGRID.REG para o diretório c:\windows\system e clicar duas vezes sobre o arquivo DBGRID.REG para registrar o controle. Na versão 6.0 o VB possui o controle DataGrid que possui o tamanho de 252 KB enquanto o a OCX do DBGrid possui uns 500 KB.
Vamos ao que interessa....
O modelo de objetos do DBGrid
O controle DBGrid possui vários objetos usados para manipular a grade. Vejamos o seu modelo:
Usando DBGrid para exibir os dados de
um BD Para usar o Controle você deve selecionar no seu projeto no VB a opção - Project Components no menu Project , e a seguir marcar na caixa de diálogo que surge , na lista de componentes , o componente Microsoft Data Bound Grid Control. Para Exibir dados no seu controle DBGrid , insira um controle de Dados DAO e defina as propriedades RecordSource e DatabaseName do controle de dados para a fonte de dados que quer exibir . A seguir insira o DBGrid no seu formulário e defina a propriedade DataSource do controle DBGrid para o nome do controle de dados e Pronto. Agora basta executar sua aplicação e os dados serão exibidos no Grid. OBS: O DBGrid não possui a propriedade DataField. |
|
modelo de objetos DBGrid | quadro 1 |
Para exibir um exemplo prático vamos usar o banco de dados Biblio.mdb e exibir os registros da tabela Publishers no grid. Abaixo a aplicação das regras do quadro 1 , e a exibição dos dados no Grid.
Tudo Certo !!! Bem , quase.... Nem tudo na vida e tão simples. Ao executar o projeto proposto no quadro 1 você vai perceber que as colunas dos registros são exibidas aleatoriamente e que os dados são apenas leitura... Ai começam a surgir as dúvidas ... Vamos procurar responder as mais usuais.
Como inserir e selecionar as colunas que eu quero exibir ?
Inserindo Colunas
A primeira coisa a fazer e ver quantas colunas você vai querer exibir. O DBGrid exibe por padrão duas colunas ( Column0 e Column1). Se você pretende exibir mais de duas colunas vai ter que inserir novas colunas. Para incluir novas colunas faça o seguinte:
Selecionando Colunas
Assim para o nosso exemplo , para exibir somente três colunas no Grid para os campos : PubID , Name e Address teremos:
As colunas não saem ajustadas ao tamanho de cada campo , para redimensionar cada coluna faça o seguinte:
Com a grade no modo de edição , posicione o ponteiro do mouse na área cinza do cabeçalho , no limite entre duas colunas . Quando o ponteiro do mouse se transformar em uma seta com dois lados basta você arrastar e redimensionar a coluna na largura que desejar. Para o nosso caso o resultado é o seguinte:
Melhorou , não é mesmo !!!
Voce pode fazer isto via código usando as propriedades: Width para definir a largura de cada coluna , a propriedade Alignment para definir o alinhamento dos dados na coluna e a propriedade caption para definir o nome da coluna. Assim poderíamos ter usado
dbgrid1.columns(0).Caption="Name"
dbgrid1.columns(0).Width=1000
dgrid1.columns(0).Alignment
= dbgCenter ' alinhamento central
Como
incluir , excluir e editar registros no Grid ?
Se você não tomar nenhuma atitude , o DBGrid somente permite alterar os dados exibidos. Você não poderá nem incluir nem excluir registros. Para mudar esta postura você tem que alterar as seguintes propriedades:
Para poder incluir , excluir e editar registros devemos alterar o valor destas propriedades para True. Faça assim:
Pronto nosso projeto já permite alterar , incluir e excluir (Como estamos usando uma tabela que possui relacionamentos , o VB irá reclamar se você tentar excluir um registro). Abaixo temos um exemplo de alteração e inclusão feita diretamente no Grid. ( Atenção !!! Tudo isto somente será possível se a propriedade RecordsetType do data control for definida como Table ou Dynaset)
Se você for um garoto(a) e'x'perto deverá esta pensando: " Não dá para fazer uma crítica dos dados digitados diretamente no Grid ? " . Dá. Para fazer isto temos que usar o evento BeforeColUpdate , pois temos que fazer a validação dos dados antes de gravá-los no banco de dados.
Vamos supor que desejamos permitir somente valores numéricos em uma coluna do grid , pois o campo associado é um campo que deve receber somente valores numéricos ; sendo que o valor informado não pode ser maior que 10. Poderemos usar o seguinte código para fazer a validação:
Private Sub DBGrid1_BeforeColUpdate(ByVal ColIndex As Integer, OldValue As Variant,_ Cancel As Integer) If ColIndex = 2 Then If Not IsNumeric(DBGrid1) Then MsgBox "Informe somente valores numéricos", vbCritical DBGrid1 = 0 End If If DBGrid1.Columns(2).Value > 10 Then MsgBox "Valor informado nao pode ser superior a 10 ! " dgbrid1 = 0 End If End If End Sub |
Usando Marcadores ( Bookmarks) e selecionando registros
Podemos nos referir a uma linha selecionada atualmente na grade usando a propriedade BooKmark , ela permite que marquemos o local de um certo registro para que possamos voltar depois para o este registro. Sua utilização é bem simples:
Dim marcador As Variant Private Sub Command1_Click() marcador = DBGrid1.Bookmark ' aqui usamos uma variável para armazenar a posição do registro selecionado End Sub Private Sub Command2_Click() DBGrid1.Bookmark = marcador ' aqui retornamos ao registro cuja posição foi marcada anteriormente End Sub |
Em conjunto com a propriedade Bookmark podemos usar a coleção SelBookmarks para selecionar visivelmente uma ou mais linhas na grade destacando-a para o usuário. Para selecionar uma linha apenas adicionamos o marcador (bookmark) á coleção SelBookmark com o seguinte código:
DBGrid1.SelBookmarks.Add DBGrid1.Bookmark
Como exemplo prático podemos realizar uma busca na base de dados para localizar um registro , e , usando as propriedades acima , selecionar o registro encontrado exibindo-o ao usuário através da seleção da linha da grade. O código para esta façanha pode ser o seguinte:
Private
Sub Command4_Click() Dim codigo As String codigo = 0 codigo = InputBox("Informe o codigo a localizar ! ", "Localizando via Código", 1) If codigo = "" Then Exit Sub End If Data1.Recordset.FindFirst "PubId=" & CLng(codigo) If Data1.Recordset.NoMatch Then MsgBox " Registro não localizado ", vbExclamation Else DBGrid1.SelBookmarks.Add DBGrid1.Bookmark 'usando a propriedade para selecionar a linha End If End Sub |
O resultado , após algumas buscas , é o seguinte:
Acho que sem querer acabei repetindo tópicos abordados em outros artigos , fazer o que !!! , bom proveito...
José Carlos Macoratti