Ordenar uma coluna agregada em datagrid Boa tarde! É possível ordenarmos uma coluna que mostra a informação de uma agregação em um DataGrid? Tenho a seguinte situação: $column_REFERENCIA = new TDataGridColumn('REFERENCIA', 'Referência', 'left'); $column_DESCRICAO = new TDataGridColumn('produtos->DESCRICAO', 'Descrição', 'left'); Gostaria de ordenar a coluna Descrição, coloquei o código abaixo: $order_DESCRICAO ...
DU
Ordenar uma coluna agregada em datagrid  
Fechado
Boa tarde!

É possível ordenarmos uma coluna que mostra a informação de uma agregação em um DataGrid?

Tenho a seguinte situação:
$column_REFERENCIA = new TDataGridColumn('REFERENCIA', 'Referência', 'left');
$column_DESCRICAO = new TDataGridColumn('produtos->DESCRICAO', 'Descrição', 'left');

Gostaria de ordenar a coluna Descrição, coloquei o código abaixo:
$order_DESCRICAO = new TAction(array($this, 'onReload'));
$order_DESCRICAO->setParameter('order', 'produtos->DESCRICAO');
$column_DESCRICAO->setAction($order_DESCRICAO);

Ao clicar na coluna, dá a seguinte mensagem de erro:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '>DESCRICAO asc LIMIT 10' at line 1

Abraços

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 (4)


MC

Douglas, boa noite

Trata-se apenas de passar para a Criteria no "onReload" a ordem que você quer (campo), pois isso vai se tornar um Select no BD.

Tente da forma abaixo, sendo que "DESCRICAO" é o campo no BD/Tabela que você quer ordenar.

 
  1. <?php>
  2. $order_DESCRICAO = new TAction(array($this, 'onReload'));
  3. $order_DESCRICAO->setParameter('order', 'DESCRICAO');
  4. $column_DESCRICAO->setAction($order_DESCRICAO);
  5. ?>
MC

Desculpe não vi a "Situação", este dado vem de outra tabela. ai não saberia te responder ao certo, uma vez que no "onReload" será feito um Select na
tabela aberta e depois carregado na Grid.

Eu nestes casos prefiro fazer uma View com Inner Join entre as tabelas.

Abraços
FC

Oi Douglas e Marcos

Não é necessário fazer View basta passar o order como sub query como nesse exemplo

www.adianti.com.br/framework_files/tutor/index.php?class=CustomerDat

Repara dentro do onReload essa parte:

 
  1. <?php
  2. $newparam = $param; // define new parameters
  3. if (isset($newparam['order']) AND $newparam['order'] == 'city->name')
  4. {
  5. $newparam['order'] = '(select name from city where city_id = id)';
  6. }
  7. // default order
  8. if (empty($newparam['order']))
  9. {
  10. $newparam['order'] = 'id';
  11. $newparam['direction'] = 'asc';
  12. }
  13. ?>
DU

Felipe, muito obrigado!
Vou testar e qualquer coisa eu volto a comentar.
Abraços.