Mostrar Lista de objetos no grid
Olá a todos.
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.
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
Curtidas 0
Respostas
Thiago Jesus
01/02/2013
Carlinha, eu utilizo Orientação a Objetos no Delphi da seguinte forma:
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;
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;
GOSTEI 0
Carla Batista
01/02/2013
Nossa, você foi longe, hein? rsrs
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.
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.
GOSTEI 0
José
01/02/2013
Carlinha, o que você está tentando fazer.
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.
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.
GOSTEI 0
Thiago Jesus
01/02/2013
Bom dia Carlinha,
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)
No evento onClick do botão, digite o seguinte:
Essa é uma maneira simples de listar dados em um Memo.
Você pode pesquisar também sobre o StringGrid.
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.
GOSTEI 0
José
01/02/2013
Concordo com o amigo Thiago, já procurei várias vezes e nunca encontrei uma maneira de listar
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.
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.
GOSTEI 0
Marco Salles
01/02/2013
Utilize o StringGrid e passe esta coleção a ele ... De maneira semelhante a o exemplo do amigo anterior . Varrendo o Array
e inserindo na Gride
e inserindo na Gride
GOSTEI 0
Thiago Jesus
01/02/2013
Concordo com o amigo Thiago, já procurei várias vezes e nunca encontrei uma maneira de listar
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.
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.
GOSTEI 0
José
01/02/2013
Concordo com o amigo Thiago, já procurei várias vezes e nunca encontrei uma maneira de listar
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.
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.
GOSTEI 0
Carla Batista
01/02/2013
Nossa, tá parecendo complicado, hein. Eu imaginei que tivesse alguma forma de ligar a lista diretamente a um grid, seja qual for, mas pelo jeito não tem, né?
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.
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.
GOSTEI 0
Daniel Santos
01/02/2013
Isso que voce quer fazer o delphi não faz! É comum no java onde ele aceita uma coleção de objetos, o Delphi ainda não trabalha desta forma!
GOSTEI 0
Carla Batista
01/02/2013
Nossa, Daniel, agora desencantei =( rsrs
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.
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.
GOSTEI 0
Daniel Santos
01/02/2013
Voce pode fazer como eu fiz e modificar o ClientDataSet para aceitar uma lista de Objetos
tipo
ClientDataSet1.Load<TCliente>(Lista);
tipo
ClientDataSet1.Load<TCliente>(Lista);
GOSTEI 0
Carla Batista
01/02/2013
Olha, me parece interessante. Como eu faço isso, Daniel?
GOSTEI 0
Daniel Santos
01/02/2013
Estude um pouco sobre RTTI!
GOSTEI 0
Carla Batista
01/02/2013
Obrigada, Daniel. Vou pesquisar sobre isso.
Nesse caso, podem fechar esse tópico, por favor.
Obrigada a todos.
Nesse caso, podem fechar esse tópico, por favor.
Obrigada a todos.
GOSTEI 0