Mostrar Lista de objetos no grid
01/02/2013
0
Estou estudando a parte de POO no Delphi e cheguei em um ponto aqui em que eu tenho um array de objetos do tipo TCliente, uma classe feita por mim.
Só que eu preciso mostrar esses objetos em um grid, tipo como fazemos com uma query, ligando a um datasource. Mas não dá pra ligar um array a um datasource, então como eu faria?
Grata.
Carla Batista
Posts
01/02/2013
Thiago Jesus
procedure TClienteDAO.ListarDados; var conexao : TDBXConnetion; command : TDBXCommand; reader : TDBXReader; begin try // Fabrico uma conexao conexao := TDBXConnectionFactory.GetConnectionFactory.GetConnection('SISTEMA','sysdba','masterkey'); // Crio uma instrução SQL command := conexao.CreateCommand; // Passo a instrução SQL para o objeto command command.Text := ' Select * From CLIENTES '; command.Prepare; // Preparo a instrução para ser executada no banco reader := command.ExecuteQuery; // o objeto Reader irá armazenar o resultado da instrução SQL if Assigned(reader) then begin // Utilize TDBXDataSetReader para copiar os dados do objeto reader para o seu ClientDataSet TDbxDataSetReader.CopyReaderToClientDataSet(reader, dm_dados.cds_clientes); end; finally // libera os objetos da memória FreeAndNil(conexao); FreeAndNil(command); FreeAndNil(reader); end; end;
Utilizando os métodos do DBX 4, podemos utilizar POO de uma maneira muito elegante.
Esse método está apenas Listando os dados. Se quiser algo específico, é só passar uma Classe Model como parâmetro, como:
procedure Insert(cliente : TClienteModel);
Não esqueça de dar uses Units DBXCommon e DBXDBReaders.
Espero que possa ajudar;
02/02/2013
Carla Batista
Na verdade acho que meu problema é mais simples. Eu tenho um array of TCliente com alguns itens e queria apenas listá-los num grid. Nem estou usando banco de dados ainda.
Eu "ouvi falar" de uma classe TList, não sei se é mais adequado que o array e se daria pra ligar a um grid.
Mas obrigada pela resposta, assim que puder darei uma olhada nesse DBX4.
02/02/2013
José
seria um exemplo de aplicação que usaria tipo um banco de dados temporário ?
Se você usar o delphi xe2 e xe3.
Pode criar uma base de dados temporária através do LiveBindings Wizard.
02/02/2013
Thiago Jesus
Para você listar dados em um DBGrid por exemplo, você iria precisar de um DataSource (Eu pelo menos nunca vi DBGrid sem ele).
Uma dica para você é, no formulário adicione:
- 01 Memo
- 02 Edits (Nome e Idade)
- 01 Button
Crie uma uma classe TCliente (pode ser no próprio formulário mesmo)
TCliente = class FNome: string; FIdade: string; end;
No evento onClick do botão, digite o seguinte:
procedure TForm1.btnListarClick(Sender: TObject); var i : Integer; lista : TList; cliente : TCliente; begin try // cria os objetos na Memória cliente := TCliente.Create; lista := TList.Create; // Passa os dados dos edits para o objeto cliente cliente.FNome := Edit1.Text; cliente.FIdade := Edit2.Text; //adiciona no objeto lista lista.Add(cliente); // loop para listar os dados no Memo for i := 0 to lista.Count -1 do begin Memo1.Lines.Add('Nome: ' + TCliente(lista.Items[I]).FNome); Memo1.Lines.Add('Idade: ' + TCliente(lista.Items[I]).FIdade); end; finally // libera os objetos da memória FreeAndNil(lista); FreeAndNil(cliente); end;
Essa é uma maneira simples de listar dados em um Memo.
Você pode pesquisar também sobre o StringGrid.
02/02/2013
José
dados em um dbgrid sem um datasource.
Mais como mencionei anteriormente se for para fazer testes
utilize a ferramente LiveBindings disponíveis nas versões XE2 e XE3 do delphi
para prototipagem é um modo muito interessante.
02/02/2013
Marco Salles
e inserindo na Gride
02/02/2013
Thiago Jesus
dados em um dbgrid sem um datasource.
Mais como mencionei anteriormente se for para fazer testes
utilize a ferramente LiveBindings disponíveis nas versões XE2 e XE3 do delphi
para prototipagem é um modo muito interessante.
Por falar em LiveBindings, gostei do seu artigo mostrando a utilização com Firemonkey, parabéns.
02/02/2013
José
dados em um dbgrid sem um datasource.
Mais como mencionei anteriormente se for para fazer testes
utilize a ferramente LiveBindings disponíveis nas versões XE2 e XE3 do delphi
para prototipagem é um modo muito interessante.
Por falar em LiveBindings, gostei do seu artigo mostrando a utilização com Firemonkey, parabéns.
Obrigado! Fico muito feliz que tenha gostado.
03/02/2013
Carla Batista
Nesse caso vou ter de fazer um laço e ir listando item por item, como o exemplo do Memo?
Daria pra fazer isso com o StringGrid, não é, Marco? Mas nunca trabalhei com esse controle. Alguém poderia me ajudar com ele?
Grata.
04/02/2013
Daniel Santos
04/02/2013
Carla Batista
Que coisa, não? Quer dizer que a única forma de listar uma coleção de registros em um grid de forma "automática" é usando um DataSource ligado a um DataSet? Agora fiquei decepcionada.
04/02/2013
Daniel Santos
tipo
ClientDataSet1.Load<TCliente>(Lista);
04/02/2013
Carla Batista
06/02/2013
Carla Batista
Nesse caso, podem fechar esse tópico, por favor.
Obrigada a todos.
Clique aqui para fazer login e interagir na Comunidade :)