terça-feira, 29 de janeiro de 2013

Carregando GRID em tempo de execução X Delphi

Hoje, vamos ver como carregar uma grid em tempo de execução.

No exemplo a seguir eu usei o grid da DevExpress, mas creio que outras grids tem as mesmas propriedades, então basta encontra-las e usar que vai dar certo.
Supondo que temos uma tabela CLIENTE,  com os campos CLI_ID,CLI_ NOME,CLI_ ENDERECO, primeiro passo é montar o SQL dando apelidos aos campos, pois esses apelidos irão aparecer como título da coluna no grid, exemplo:

select CLI_ID as Codigo,CLI_NOME as Nome, CLI_ENDERECO as Endereco from CLIENTE

Até ai tranquilo, nada de novidade, esse comando vai estar em uma query, que podemos criar em tempo de execução , e não podemos esquecer do dataSource, vamos ao código.

//dentro da procedure ou evento, na seção var, criamos as variável que vamos usar.
//aqui estou usando a query do IBO, mas se for usar outra, basta substituir o tipo.
var
qryGrid : TIBOQuery;
dsGrid : TDataSource;

//agora no momento que achar necessário vamos instanciar os objetos , passar o sql, fazer as ligações e //pronto.
//instanciando os objetos

qryGrid := TIBOQuery.Create(Application);
qryGrid. IB_Connection :=  //aqui você passa a sua conexão com o banco de dados
dsGrid := TDataSource.Create(Application);

//agora vamos passar o SQL

qryGrid.close;
qryGrid.sql.clear;
qryGrid.sql.add(' select CLI_ID as Codigo,CLI_NOME as Nome, CLI_ENDERECO as Endereco from CLIENTE');
qryGrid.open;

//agora vamos passar a qry para o dataSource

dsGrid.dataSet := qryGrid;

//agora vamos limpar a grid e passar o dataSource com as informações para ela.

gridDBTableView1.DataController.DataSource         := nil;
gridDBTableView1.ClearItens;
gridDBTableView1.DataController.DataSource := dsGrid;
gridDBTableView1.DataController.CreateAllItens(True);

//com isso já vai dar certo, não esquencendo que a grid que usei no exemplo é a da  DevExpress, mas não //tem segredo, passando o dsGrid para o dataSource da grid já  funciona
//agora se você quiser configurar a largura das colunas, basta acessa-las pelo índice.

gridDBTableView1.Columns[0]. Width := 65;
gridDBTableView1.Columns[1]. Width := 65;
gridDBTableView1.Columns[2]. Width := 65;

pronto, fizemos toda a configuração e os componentes query e dataSource em tempo de execução, assim temos mais controle sobre o código.
espero ter ajudado alguém, e não esqueçam de dar uma clicadinha nos anúncios da página.rsrs

4 comentários:

  1. Nossa, era isso mesmo que eu precisava, obrigado!

    ajudou muito

    ResponderExcluir
  2. olá, por curiosidade, se executares o teu código + do que uma vez não dá erro em gridDBTableView1.DataController.CreateAllItens(True); ?

    ResponderExcluir
    Respostas
    1. Bom dia amigo, repare que nas primeiras linhas do código, o dataSource do grid é limpado, e os itens destruidos.

      gridDBTableView1.DataController.DataSource := nil;
      gridDBTableView1.ClearItens;

      depois é setado o dataSource novo e os itens são criados novamente

      gridDBTableView1.DataController.DataSource := dsGrid;
      gridDBTableView1.DataController.CreateAllItens(True);

      espero ter ajudado amigo.
      qualquer duvida posso te passar mais informações, hoje em dia tenho umas idéias novas, meu e-mail é marcio_rodrigo83@yahoo.com.br

      Excluir
  3. ao usar este método de carregamento pelo código está dando erro porque o colega postou os comandos ".clearItens" e "createallItens" com a letra "N" na palavra "ITENS" e o correto é com "M" = "ITEMS"

    ResponderExcluir