Nome e não ID no Datagrid Pessoal alguém já passou por isso: Estou precisando mostrar no datagrid o nome e não o ID, por exemplo, onde esta id_produto quero que ele mostre pra mim o nome dele que esta no campo descricao, já tentei desta forma: id_produto->descricao e não funcionou. $column_id = new TDataGridColumn('id', 'ID', 'right'); $column_id_produto = new TDataGridColumn('id_produto', ...
FS
Nome e não ID no Datagrid  
Pessoal alguém já passou por isso: Estou precisando mostrar no datagrid o nome e não o ID, por exemplo, onde esta id_produto quero que ele mostre pra mim o nome dele que esta no campo descricao, já tentei desta forma: id_produto->descricao e não funcionou.

$column_id = new TDataGridColumn('id', 'ID', 'right');
$column_id_produto = new TDataGridColumn('id_produto', 'Produto', 'right');
$column_qtde = new TDataGridColumn('qtde', 'Qtde', 'right');
$column_valor_unitario = new TDataGridColumn('valor_unitario', 'Valor Unitário', 'left');

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (9)


NM

Hola, bom dia

Depois de adicionar a coluna na datagrid dale um setTransform:
$col_vd_cd_despe->setTransformer(function($value) {
return Tdespesas::findInTransaction(self::$db, $value)->td_descri;
});

com isso ele vai mostrar a descrição ou nome em vez do codigo
FS

Não sei se é devido ao seu código mais algumas informações não entendi de onde esta vindo, por exemplo o Tdespesas;
NM

Perdão, ali coloque um codigo de uma aplicação que tenho aqui, apenas como exemplo

$col_vd_cd_despe->setTransformer(function($value) {
return Tdespesas::findInTransaction(self::$db, $value)->td_descri;
});

$col_vd_cd_despe >>> coluna da grid
Tdespesas >>> tabela do model
td_descri >>> campo da tabela que tem que mostrar no lugar do codigo

FS

deu certo aqui agora, agora me deparei com a mesma situação porém no mestre detalhe e da maneira como foi mecionado não funciona para
esta nova situação, saberia como resolver para que ele apresente o nome e não o id?
 
  1. <?php
  2. public function onDetailAdd( $param )
  3. {
  4. try
  5. {
  6. $this->form->validate();
  7. $data = $this->form->getData();
  8. /** validation sample
  9. if (empty($data->fieldX))
  10. {
  11. throw new Exception('The field fieldX is required');
  12. }
  13. **/
  14. $uniqid = !empty($data->detail_uniqid) ? $data->detail_uniqid : uniqid();
  15. $grid_data = [];
  16. $grid_data['uniqid'] = $uniqid;
  17. $grid_data['id'] = $data->detail_id;
  18. $grid_data['id_produto'] = $data->detail_id_produto;
  19. $grid_data['id_produto'] = $resultado;
  20. $grid_data['qtde'] = $data->detail_qtde;
  21. ?>
NM

Oi

Se for campo no Form ai uso o TDBCombo:

$co_cd_transp = new TDBCombo('co_cd_transp', 'crtmic', 'Transportador', 'tr_id', 'tr_nm_reduzi');

FS

Não, me refiro a esta linha no grid
 
  1. <?php
  2. $grid_data['id_produto'] = $data->detail_id_produto;
  3. ?>

onde aparece o ID e eu que mostre a descrição.
NM

O setTransforme funciona mas quando você vai fazer uma pesquisa ele consegue localizar pelo codigo e não pelo nome que esta em tela, pelo menos não consegui aqui, o que faço é para essas grids que tem tabela relacionadas crio uma view na base de dados ai faço a grid com os dados da view.
FS

Sim, também faço dessa forma, porém este tipo de formulário que tem o metre detalhe não tem como, bom eu acho que não usar uma view.
FS

Consegui resolver meu problema vendo um video do Pablo no youtube e com a ajuda do Nilton
segue o link caso alguem precidese: https://youtu.be/mN4G3P5LiT8
Meu código ficou assim:
 
  1. <?php
  2. // items
  3. $this->detail_list->addColumn( new TDataGridColumn('uniqid', 'Uniqid', 'center') )->setVisibility(false);
  4. $this->detail_list->addColumn( new TDataGridColumn('id', 'Id', 'center') )->setVisibility(false);
  5. $this->detail_list->addColumn( new TDataGridColumn('id_produto', 'ID', 'left', 100) );
  6. $pi = $this->detail_list->addColumn( new TDataGridColumn('id_produto', 'Descrição', 'left', 100) );
  7. $this->detail_list->addColumn( new TDataGridColumn('qtde', 'Qtde', 'left', 100) );
  8. $pi->setTransformer(function($value) {
  9. return Produto::findInTransaction('expedicao', $value)->descricao;
  10. });
  11. ?>