MB
Carregar texto de um campo em uma datagrid ao inves do ID do cam
Bom dia,
Não estou conseguindo fazer funcionar a Associação de Objetos em uma DATAGRID.
Ao carregar a DATAGRID, é listado 'ID' ao invés do texto que é carregado na tela de cadastro na TDBCombo. Acredito que falte algo no método onReload para trazer o texto e não o ID.
Em anexo imagem de como deveria listar na DATAGRID.
Se alguém puder dar um help... agradeço!
Utilizo o código abaixo para listar os contatos cadastrados.
Não estou conseguindo fazer funcionar a Associação de Objetos em uma DATAGRID.
Ao carregar a DATAGRID, é listado 'ID' ao invés do texto que é carregado na tela de cadastro na TDBCombo. Acredito que falte algo no método onReload para trazer o texto e não o ID.
Em anexo imagem de como deveria listar na DATAGRID.
Se alguém puder dar um help... agradeço!
Utilizo o código abaixo para listar os contatos cadastrados.
- <?php
- class ContatoList extends TPage
- {
- private $form; //registrando form
- private $datagrid; //listagem
- private $pageNavigation; //navegação pelas páginas
- private $loaded;
-
- public function __construct()
- {
- parent::__construct();
-
- //criando form
- $this->form = new TQuickForm('ContatoList');
- $this->form->setFormTitle('Listagem de Contatos');
- $this->form->class = 'tform';
-
- $nome = new TEntry('nome');
- $this->form->addQuickField( 'Nome:', $nome, '70%' );
- $this->form->addQuickAction('Buscar', new TAction(array($this, 'onSearch')), 'fa:search blue');
- $this->form->addQuickAction('Novo', new TAction(array('ContatoForm', 'onClear')), 'fa:plus-circle green');
-
- $nome->setValue( TSession::getValue( 'nome' ) );
-
- $this->datagrid = new TDataGrid;
- $this->datagrid->style = 'width: 100%';
-
- $id_contato = new TDataGridColumn('id_contato', 'Id', 'right', '3%');
- $celular = new TDataGridColumn('celular', 'Celular', 'left', '10%');
- $nome = new TDataGridColumn('nome', 'Nome', 'left', '20%');
- $datanascimento = new TDataGridColumn('datanascimento', 'Nascimento', 'left', '8%');
- $comprou = new TDataGridColumn('comprou', 'Comprou', 'left', '8%');
- $naocomprou = new TDataGridColumn('naocomprou', 'Motivo', 'left', '30%');
- $interesse = new TDataGridColumn('interesse', 'Interesse', 'left', '10%');
- $opcoes = new TDataGridColumn('opcoes', 'Opções', 'left', '10%');
- $opcao_sexual = new TDataGridColumn('opcao_sexual', 'Genero', 'left', '10%');
-
- $order1 = new TAction(array($this, 'onReload'));
- $order2 = new TAction(array($this, 'onReload'));
-
- $order1->setParameter('order', 'id_contato');
- $order2->setParameter('order', 'nome');
-
- $id_contato->setAction($order1);
- $nome->setAction($order2);
-
- $this->datagrid->addColumn($id_contato);
- $this->datagrid->addColumn($celular);
- $this->datagrid->addColumn($nome);
- $this->datagrid->addColumn($datanascimento);
- $this->datagrid->addColumn($comprou);
- $this->datagrid->addColumn($naocomprou);
- $this->datagrid->addColumn($interesse);
- $this->datagrid->addColumn($opcoes);
- $this->datagrid->addColumn($opcao_sexual);
-
-
- $action1 = new TDataGridAction(array('ContatoForm', 'onEdit'));
- $action1->setLabel('Editar');
- $action1->setImage('fa:edit blue');
- $action1->setField('id_contato');
-
- $action2 = new TDataGridAction(array($this, 'onDelete'));
- $action2->setLabel('Delete');
- $action2->setImage('fa:trash red');
- $action2->setField('id_contato');
-
- $this->form->addQuickAction( 'CSV', new TAction(array($this, 'onExportCSV')), 'fa:table' );
-
- $this->datagrid->addAction($action1);
- $this->datagrid->addAction($action2);
-
- $this->datagrid->createModel();
-
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigation->setWidth($this->datagrid->getWidth());
-
- $vbox = new TVBox;
-
- $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $vbox->add($this->form); // add a row to the form
- $vbox->add($this->datagrid); // add a row to the datagrid
- $vbox->add($this->pageNavigation);
-
- parent::add($vbox);
- }
-
- function onSearch()
- {
- // get the search form data
- $data = $this->form->getData();
-
- // check if the user has filled the form
- if (isset($data->nome))
- {
- // creates a filter using what the user has typed
- $filter = new TFilter('nome', 'like', "%{$data->nome}%");
-
- // stores the filter in the session
- TSession::setValue('id_contato', $filter);
- TSession::setValue('nome', $data->nome);
-
- // fill the form with data again
- $this->form->setData($data);
- }
-
- $param = array();
- $param['offset'] =0;
- $param['first_page']=1;
- $this->onReload($param);
- }
-
- function onReload($param = NULL)
- {
- try
- {
- // open a transaction with database 'samples'
- TTransaction::open('dbmodaviva');
-
- // creates a repository for City
- $repository = new TRepository('Contato');
- $limit = 20;
-
- // creates a criteria
- $criteria = new TCriteria;
-
- // default order
- if (empty($param['order']))
- {
- $param['order'] = 'id_contato';
- $param['direction'] = 'asc';
- }
-
- $criteria->setProperties($param); // order, offset
- $criteria->setProperty('limit', $limit);
-
- if (TSession::getValue('Contato'))
- {
- // add the filter stored in the session to the criteria
- $criteria->add(TSession::getValue('Contato'));
- }
-
-
- // load the objects according to criteria
- $objects = $repository->load($criteria);
-
- $this->datagrid->clear();
- if ($objects)
- {
- // iterate the collection of active records
- foreach ($objects as $object)
- {
- // add the object inside the datagrid
- $this->datagrid->addItem($object);
- }
- }
-
- // reset the criteria for record count
- $criteria->resetProperties();
- $count= $repository->count($criteria);
-
- $this->pageNavigation->setCount($count); // count of records
- $this->pageNavigation->setProperties($param); // order, page
- $this->pageNavigation->setLimit($limit); // limit
-
- // close the transaction
- TTransaction::close();
- $this->loaded = true;
- }
- catch (Exception $e) // in case of exception
- {
- // shows the exception error message
- new TMessage('error', $e->getMessage());
-
- // undo all pending operations
- TTransaction::rollback();
- }
- }
-
- /**
- * method onDelete()
- * executed whenever the user clicks at the delete button
- * Ask if the user really wants to delete the record
- */
- function onDelete($param)
- {
- // define the delete action
- $action = new TAction(array($this, 'Delete'));
- $action->setParameters($param); // pass the key parameter ahead
-
- // shows a dialog to the user
- new TQuestion('Deseja realmente deletar esse registro?', $action);
- }
-
- function Delete($param)
- {
- try
- {
- // get the parameter $key
- $key = $param['id_contato'];
-
- TTransaction::open('dbmodaviva'); // open a transaction with database 'samples'
- $object = new Contato($key); // instantiates object City
- $object->delete(); // deletes the object from the database
- TTransaction::close(); // close the transaction
-
- // reload the listing
- $this->onReload( $param );
-
- // shows the success message
- new TMessage('info', "Registro Deletado");
- }
- catch (Exception $e) // in case of exception
- {
- // shows the exception error message
- new TMessage('error', $e->getMessage());
-
- // undo all pending operations
- TTransaction::rollback();
- }
- }
-
- function onExportCSV()
- {
- $this->onSearch();
- try
- {
- // open a transaction with database 'dbmodaviva'
- TTransaction::open('dbmodaviva');
-
- // creates a repository for Customer
- $repository = new TRepository('Contato');
-
- // creates a criteria
- $criteria = new TCriteria;
-
- if (TSession::getValue('customer_filter1'))
- {
- // add the filter stored in the session to the criteria
- $criteria->add(TSession::getValue('customer_filter1'));
- }
-
- if (TSession::getValue('customer_filter2'))
- {
- // add the filter stored in the session to the criteria
- $criteria->add(TSession::getValue('customer_filter2'));
- }
-
-
- $csv = '';
- // load the objects according to criteria
- $relacao = $repository->load($criteria);
- if ($relacao)
- {
- foreach ($relacao as $relacao)
- {
- $csv .= $relacao->id_contato.';'.
- $relacao->nome.';'.
- $relacao->celular.';'.
- $relacao->datanascimento.';'.
- $relacao->comprou.';'.
- $relacao->naocomprou.';'.
- $relacao->interesse.';'.
- $relacao->opcao.';'.
- $relacao->opcao_sexual."\n";
- }
- file_put_contents('app/output/relacao_de_contatos.csv', $csv);
- TPage::openFile('app/output/relacao_de_contatos.csv');
- }
- // close the transaction
- TTransaction::close();
- }
- catch (Exception $e) // in case of exception
- {
- // shows the exception error message
- new TMessage('error', $e->getMessage());
-
- // undo all pending operations
- TTransaction::rollback();
- }
- }
-
- /**
- * method show()
- * Shows the page
- */
- function show()
- {
- // check if the datagrid is already loaded
- if (!$this->loaded)
- {
- $this->onReload( func_get_arg(0) );
- }
- parent::show();
- }
-
-
- }
- ?>
Não sei se é isso que você quer, mas, uma solução seria mudar o valor antes de atribuí-lo ao datagrid
Esse código deveria ser colocado na linha 154 e a propriedade 'comprou' deve ser substituída pelo campo que você usa para identificar a compra.
Seria interessante que trouxesse a informação em uma tabela do banco de dados, pois terei casos onde serão vários valores (Ex: coluna interesse vai ter valores como: CAMISA, CALÇA, JAQUETA, BERMUDA, TENIS, SAPATO....
Ele está me retornando o ID desses itens na tabela, quando na verdade teria que exibir a descrição do item.
Vou utilizar isso em pelo menos 04 colunas da DATAGRID.
Entendi, nesse caso você precisa ter configurado em seu modelo os métodos 'get_interesse' e 'set_interesse', que serão métodos que responsáveis por armazenar referencias para os registros com de acordo com seus respectivos ID's. Após definido estes métodos, você faria o seguinte no seu código:
Um exemplo de um modelo com o get e set configurados:
Thiago,
Nao funcionou.
O Model ficou dessa forma:
Na Datagrid ficou dessa forma:
Porém ao acessar a DATAGRID, retorna a msg "trying to access a non existent property adianti", nos campos campos onde era pra aparecer o valor do campo.
Dei uma lida nesse tópico:
Deve ser algum detalhe que não percebi.</Marcelo>
mensagem correta: ""trying to access a non existent property (interesse->objeto)"
Você colocou na função get "get_obj_interesse" e na hora de chamar a propriedade, passou "objeto". Creio que esse seja o problema, tente fazer da seguinte maneira:
Mudou só o final da mensagem: trying to access a non existent property (interesse->obj_interesse)...
Agora que reparei uma coisa: Você aparentemente não está usando o modelo "objeto" neste datagrid, correto? o método get_obj_interesse deveria estar dentro do modelo "interesse"; assim sendo, dentro do modelo interesse você teria uma propriedade "obj_interesse" e iria acessá-lo da seguinte forma:
Não estou! Ela carrega do modelo "contato".
No control ContatoForm.class.php esta dessa forma:
Coloquei para listar a datagrid (ContatoList) a partir do ContatoForm. Fiz errado dessa forma?
Corrigindo: a partir do model Contato.class.php... fiz errado?
Boa noite senhores, estou como o mesmo problema. Na classe AgdPadroesatendimentos tenho o get definido como:
public function get_sis_empresas()
{
// loads the associated object
if (empty($this->sis_empresas))
$this->sis_empresas = new SisEmpresas($this->sis_empresas_id);
// returns the associated object
return $this->sis_empresas;
}
Já la na classe de controle (AgdPadroesatendimentosFormList) tenho a chamada do get:
$column_id_empresa = new TDataGridColumn('{sis_empresas->emp_razaosocial}', 'Empresa', 'left');
O campo emp_razaosocial existe na tabela sis_empresas. O que posso estar fazendo de errado?
Boa noite achei o problema.
Obrigado e abraço.