Hoje, vou demonstrar como utilizar lookup, MaskEdit e etc dentro da CxGrid.

Para isso, selecionei uma tabela qualquer dentro de um banco de dados, onde haja relacionamentos(FK). No meu caso, a Tabela atendimento, onde há relacionamento como Classe, Usuário, Sistema, etc. Faça a conexão com o banco de dados de sua preferencia (Seria interessante voce utilizar o DbExpress e que você possa executar o applyupdates para confirma-mos se realmente funciona).

 

Para o exemplo vamos precisar de: 2 SQLDataSet (um para a consulta e operação da tabela padrao e outra para as tabelas de relacionamento). No primeiro SQLDataSet (SQLDataSet1) ligue-o ao SQLConnection e adicione o comando SQL (Exe: Select * From Atendimento). Vá ao FIELDS EDITOR com o botão direito e novamente com o botão direito vá em ADD ALL FIELDS. No segundo SQLDataSet (SQLDataSet2) legue-o ao SQLConnection e por enquanto só.

 

Beleza... feito isso vamos precisar de 2 DataSetProviders. O primeiro (DataSetProvider1) ligue-o ao SQLDataSet1 e o Segundo alem de ligar ao SQLDataSet2 você ira alterar a opção poAllowCommandText para true. Com isso teremos um SQLDataSet para executar vários comandos SQL ao mesmo tempo.

 

Feito isso, agora iremos precisar de 2 ClientDataSets. O ClientDataSet1 iremos liga-lo ao DataSetProvider1 e adicionar os fields no componente. O ClientDataSet2 alem de ligar-lo ai DataSetProvider, iremos adicionar no campo CommandText uma instrução SQL para uma tabela de relacionamento, no meu caso a tabela de usuários (Select * From Usuários). Adicionar os fields e pronto.

 

Feito isso precisaremos de 2 DataSources, um para o ClientDataSet1 e outro para o ClientDataSet2.

 

Parte chata neh... mais vamos ao que interessa, que é o cxGrid.

 

Adicione um CxGrid e mude sua propriedade Align para AlClient. Automaticamente ele ira criar para o cxGrid um level e um dbTableView. Clique na opção customize e depois em cima do cxGrid1DBTableView1 e va na propriedade DataController e selecione o DataSource1.

Ao lado direito click na opção Retrieve Fields, para carregar para o Grid as colunas. Até aqui facil! Agora vamos a parte mais... facil ainda.

 

No meu caso, tenho as colunas Codigo, Classe, Data, Usuario, Descricao, etc. Sendo que a coluna Usuario é um FK da tabela Usuario, portanto só esta gravado o código do usuário. Bom, para resolvermos isso, vamos a coluna usuário, ai na tela de customização do CxGrid mesmo e ao lado esquerdo vai aparecer as propriedades da coluna (Name, Width, Caption, etc.). Procure a propriedade Propierties. La, se todo o pacote DevExpress estiver corretamente instalado, irão vários componentes que podemos utilizar. Nesse caso, iremos utilizar o LookupComboBox. Ao selecionar a opção, ira aparecer abaixo, mais um monte de opções, essas todas referente ao LookupComboBox.

 

Dificil neh... nada! Para finalizar, basta ir a opção ListSource, ligado ao DataSource2 e no campo ListFieldName selecionar a coluna que ira aparecer a descrição e no campo KeyFieldNames a coluna referente a chave.

 

DICA: No campo ListFieldName voce pode selecionar mais de uma coluna, sempre separando por ;. Para melhorar o visual, marque como True a opção DropDownAutoSize, que ira adequar os campos ao tamanho dos textos.

 

Antes de compilarmos o projeto é bom adicionar um panel, com a propriedade Align = AlBottom e dentro do panel dois botões.

No Primeiro, coloque um código para a abertura dos ClientsDataSet.

Exemplo: 

 

  with ClientDataSet1 do
  begin
    Close;
    Open;
  end;

  with ClientDataSet2 do
  begin
    Close;
    Open;
  end;

 

O segundo botão ira servir para atualizar os dados no banco. Coloque o seguinte código:

 

  if not (ClientDataSet1.State = dsEdit) or
         (ClientDataSet1.State = dsInsert)
then
    ClientDataSet1.Edit;
  ClientDataSet1.ApplyUpdates(
0);

 

 

Está achando que é só isso... rsrs

 

O cxGrid, por padrão, vem com algumas opções que precisamos alterar. Vou listar as mesmas, porque deve estar muito chato ler, vai no grid com o botão direito e click.... afff...

 

Vamos la.. Dentro do cxGrid1DBTableView1

·         Aba OptionsData -> Append    = True (Para adicionar novos registros);

·         Aba OptionsView -> Navigator = True (Utilizar o navigator da cxGrid mesmo) ;

 

Acho que agora está beleza... só compilar o projeto e testar..

 

Bom. Esse é meu primeiro artigo e eu nem sou especialista nem nada, sou só um pobre programador iniciante que quer compartilhar informações que ainda não achamos no google (rsrsrs). Me desculpem pelos erros de português (qualquer coisa culpa do word)... e espero ter ajudado em alguma coisa! Abraços.

 

William Galleti

william.galleti@gmail.com