Social Icons

terça-feira, 13 de novembro de 2012

Usando TJvDBGrid – Parte 2

Nesse artigo iremos continuar a aprender os recursos avançados da TJvDBGrid. Aprenderemos hoje a como utilizar componentes Data Aware dentro das células da TJvDBGrid. Esse recurso é muito interessante, porque nos ajuda a editar registros direto pela DBGrid usando os eventos desses componentes.
Informação
Recomendamos a leitura do artigo Usando TJvDBGrid – Parte 1.
Vamos criar a aplicação exemplo então. Crie uma nova aplicação no delphi e adicione os seguintes componentes ao formulário.
  • 1 TJvDBgrid
  • 1 TDBNavigator
  • 2 TClientDataSet
  • 2 TDataSource
  • 1 TDBEdit
  • 1 TDBComboBox
  • 1 TDBLookupComboBox
imagem1
O ClientDataSet1 deverá ter os seguintes campos:
  • CHECK :Booleano
  • NOME :String[80]
  • SEXO :String[10]
  • TIPO :String[20]
  • OBSERVACAO :Memo
O ClientDataSet2 deverá ter somente um campo chamado DESCRICAO
As seguintes ligações deverão ser feitas:
  • JvDBGrid1.DataSource := DataSource1
  • DBNavigator1.DataSource := DataSource 1
  • DataSource1.DataSet := ClientDataSet 1
  • DataSource2.DataSet := ClientDataSet 2
  • DBEdit1.DataSource := DataSource1
  • DBEdit1.DataField := ‘NOME’
  • DBComboBox.DataSource := DataSource1;
  • DBComboBox.DataField := ‘SEXO’
  • DBLookupComboBox1.DataSource := DataSouce1
  • DBLookupComboBox1.DataField := ‘TIPO’
  • DBLookupComboBox1.ListSource := DataSource2’
  • DBLookupComboBox1.ListField := ‘DESCRICAO’
  • DBLookupComboBox1.KeyField := ‘DESCRICAO’
Agora vamos fazer a mágica, vamos alterar a propriedade EditControls da JVDBGrid1. Então selecione os campos NOME, SEXO, OBSERVACAO, TIPO. Depois de selecionados, para cada campo seré atribuido um Edit Control.
  • NOME: DBEdit1
  • SEXO: DBComboBox1
  • OBSERVACAO: DBMemo1 (Mudar a propriedade Rentime Size para Cell Size)
  • TIPO: DBLookupComboBox1
imagem2
Vamos implementar os seguintes códigos:

procedure TForm1.FormCreate(Sender: TObject);
begin
   ClientDataSet1.CreateDataSet;
   ClientDataSet2.CreateDataSet;

   ClientDataSet2.Append;
   ClientDataSet2DESCRICAO.AsString := 'Cliente';
   ClientDataSet2.Post;

   ClientDataSet2.Append;
   ClientDataSet2DESCRICAO.AsString := 'Fornecedor';
   ClientDataSet2.Post;

   ClientDataSet2.Append;
   ClientDataSet2DESCRICAO.AsString := 'Transportadora';
   ClientDataSet2.Post;

   ClientDataSet2.Append;
   ClientDataSet2DESCRICAO.AsString := 'Funcionario';
   ClientDataSet2.Post;

   ClientDataSet2.Append;
   ClientDataSet2DESCRICAO.AsString := 'Outros';
   ClientDataSet2.Post;

   DBComboBox1.Items.Add('Feminino');
   DBComboBox1.Items.Add('Masculino');
end;


procedure TForm1.JvDBGrid1ColumnResized(Grid: TJvDBGrid; ACol,
  NewWidth: Integer);
begin
   if JvDBGrid1.Columns[Acol].FieldName = 'OBSERVACAO' then
      DBMemo1.Width := NewWidth;
end;

Pronto! Se tudo ocorrer bem você já terá uma aplicação de exemplo que utiliza os componentes data aware direto na edição da JvDBGrid.


Dica
Outros componentes podem ser utilizados na TJVDBGrid desde que sejam componentes data aware. 

Abaixo está uma imagem de como ficará aplicação final

imagem3

No próximo artigo aprederemos como estilizar nossa TJvDBGrid.

Baixe os fontes do artigo no GitHub

domingo, 4 de novembro de 2012

Usando TJvDBGrid – Parte 1

Hoje eu começo uma série de artigos ensinando como utilizar os recursos avançados do componente TJvDBGrid. Ele faz parte dos componentes JEDI VCL que são gratuitos e livres.

Caso ainda não tenha o JEDI VCL instalado você pode fazer o download a partir do site http://jvcl.delphi-jedi.org/.
Com o TJvDBGrid pode-se facilmente criar colunas que mostram campos no formato de checbox, também permite o congelamento de colunas e facilita a edição de dados na grid. Nessa primeira parte ensinarei como utilizar as colunas que mostram os dados de formato de checkbox.
Crie uma nova aplicação no seu delphi e inclua os seguintes componentes ao formulário.
  • TDBNavigator
  • TJvDBGrid
  • TClientDataSet
  • TDataSource
Crie no ClientDataSet1 os seguintes campos
  • CHECK :Booleano
  • DESCRIÇÃO :String[80]
Faça as seguintes ligações dos componentes:
  • DataSource1.DataSet := ClientDataSet1
  • JvDBGrid1.DataSource := Datasource1
  • DBNavigator1.DataSource := DataSource1
No evento OnCreate do formulário coloque o seguinte código
procedure TForm1.FormCreate(Sender: TObject); 
begin 
   ClientDataSet1.CreateDataSet; 
end;
No evento AfterInsert do Clientdataset1 coloque o seguinte código:
procedure TForm1.ClientDataSet1AfterInsert(DataSet: TDataSet); 
begin 
   ClientDataSet1CHECK.AsBoolean := false; 
end;

No evento OnCellClick do JvDBGrid1 coloque o seguinte Código:
if Column.FieldName = 'CHECK' then 
begin 
   if ClientDataSet1.IsEmpty then 
      exit; 
   if ClientDataSet1.State = dsBrowse then 
      ClientDataSet1.Edit; 

   ClientDataSet1CHECK.AsBoolean := not ClientDataSet1CHECK.AsBoolean; 
   ClientDataSet1.Post; 
end;

Pronto! Basta executar o exemplo e incluir registros usando o JVDBNavigator, assim quando clicarmos na coluna CHECK será marcado ou desmarcado o checkbox dela.

imagem1

É isso aí, até o próximo artigo pessoal!!!

Dica
O fato da coluna CHECK ser do tipo Booleano faz com que a JvDBGrid1 interprete automaticamente a coluna como visualização de checbox, no entanto podemos fazer isso para colunas de outros tipos de dados.
Ex.: Se a coluna CHECK fosse um String[1] e mostrasse valores S ou N então bastaria utilizar o evento OnCheckIfBooleanField e Alterar as variáveis StringForTrue := 'S' e StringForFalse := 'N'


Baixe os fontes do artigo no GitHub