HM
Criar Datagrid Manual
Boa noite, estou com um problema no qual preciso mostrar o dados no datagrid somente quando for escolhido os filtros pois a tabela tem muitos registros, sendo assim, mostrar os dados no datagrid quando entra na página irá travar tudo.
Fiz o exemplo do livro porém não consigo mostrar o datagrid e sua paginação.
Fiz o exemplo do livro porém não consigo mostrar o datagrid e sua paginação.
- <?php
- use Adianti\Control\TPage;
- use Adianti\Database\TCriteria;
- use Adianti\Database\TFilter;
- use Adianti\Database\TRepository;
- use Adianti\Database\TTransaction;
- use Adianti\Registry\TSession;
- use Adianti\Widget\Datagrid\TDataGridColumn;
- use Adianti\Widget\Dialog\TMessage;
- use Adianti\Widget\Form\TLabel;
- use Adianti\Widget\Wrapper\TDBUniqueSearch;
- class DistribuicaoRegionalList extends TPage
- {
- private $form;
- protected $datagrid;
- use Adianti\base\AdiantiStandardListTrait;
- public function __construct()
- {
- parent::__construct();
- //$this->setDatabase('sorteioapp');
- //$this->setActiveRecord('DistribuicaoRegional');
- $this->setLimit(10);
- $this->addFilterField('concurso_id', '=', 'concurso_id');
- $this->addFilterField('regiona_id', '=', 'regional_id');
- $this->form = new BootstrapFormBuilder('form_search_estado_bilhete_distribuido');
- $this->form->setFormTitle('Distribuição Regional (Lotes Entregues)');
- $concurso = new TDBUniqueSearch('concurso_id', 'sorteioapp', 'Concursos', 'concurso_id', 'concurso_id');
- $regional = new TDBUniqueSearch('regional_id', 'sorteioapp', 'RegionalModel', 'regional_id', 'nome');
- $concurso->setSize('100%');
- $concurso->setMinLength(0);
- $regional->setSize('100%');
- $regional->setMinLength(0);
- $this->form->addFields( [new TLabel('Concurso')], [$concurso],
- [new TLabel('Regional')], [$regional] );
- $concurso->setValue(TSession::getValue('Valor_concurso'));
- $this->form->setData( TSession::getValue(__CLASS__.'_filter_data') );
- $btn = $this->form->addAction(_t('Find'), new TAction([$this, 'onSearch']), 'fa:search');
- $btn->class = 'btn btn-sm btn-primary';
- $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
- $this->datagrid->style = 'width: 100%';
- $column_concurso = new TDataGridColumn('concurso_id', 'Concurso', 'left');
- $column_numini = new TDataGridColumn('numinicio', '', 'left');
- $column_numfim = new TDataGridColumn('numfim', '', 'left');
- $column_identificacao_ini = new TDataGridColumn('identificacaoinicial', 'Número Inicial', 'left');
- $column_identificacao_fim = new TDataGridColumn('identificacaofinal', 'Número Final', 'left');
- $column_quantidade = new TDataGridColumn('= ({numfim} - {numinicio}) + 1', 'Quantidade', 'left');
- $column_regional = new TDataGridColumn('regional_nome', 'Regional', 'left');
- $column_regi_id = new TDataGridColumn('regional_id','', 'left');
- $this->datagrid->addColumn($column_concurso);
- $this->datagrid->addColumn($column_identificacao_ini);
- $this->datagrid->addColumn($column_identificacao_fim);
- $this->datagrid->addColumn($column_quantidade);
- $this->datagrid->addColumn($column_regional);
- $this->datagrid->createModel();
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction(new TAction([$this, 'onReload']));
- $this->pageNavigation->setWidth($this->datagrid->getWidth());
- $panel = new TPanelGroup('', 'white');
- $panel->add($this->datagrid);
- $panel->addFooter($this->pageNavigation);
- $container = new TVBox;
- $container->style = 'width: 100%';
- // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add($this->form);
- $container->add($panel);
- parent::add($this->form);
- }
- public function onSearch()
- {
- $data = $this->form->getData();
- if(isset($data->concurso_id)){
- $filter_concurso = new TFilter('concurso_id', '=', $data->concurso_id);
- $filter_regional = new TFilter('regional_id', '=', $data->regional_id);
- TSession::setValue('Concurso_filter', $filter_concurso);
- TSession::setValue('Valor_concurso', $data->concurso_id);
- TSession::setValue('Regional_filter', $filter_regional);
- TSession::setValue('Valor_regional', $data->regional_id);
- $this->form->setData($data);
- $param = array();
- $param['offset'] = 0;
- $param['first_page'] = 1;
- $this->onReload($param);
- }
- }
- public function onReload($param = NULL)
- {
- try
- {
- TTransaction::open('permission');
- if(TSession::getValue('Concurso_filter')){
- $repository = new TRepository('DistribuicaoRegional');
- $limit = 10;
- $criteria = new TCriteria;
- if(empty($param['order'])){
- $param['order'] = 'regional_nome';
- $param['direction'] = 'asc';
- }
- $criteria->setProperties($param); // order, offset
- $criteria->setProperty('limit', $limit);
- if(TSession::getValue('Concurso_filter')){
- $criteria->add(TSession::getValue('Concurso_filter'));
- }
- if(TSession::getValue('Regional_filter')){
- $criteria->add(TSession::getValue('Regional_filter'));
- $criteria->add(new TFilter('regional_nome', 'IS NOT', NULL));
- }
- $objects = $repository->load($criteria);
- $this->datagrid->clear();
- if($objects){
- foreach($objects as $object){
- $this->datagrid->addItem($object);
- }
- }
- $criteria->resetProperties();
- $count = $repository->count($criteria);
- $this->pageNavigation->setCount($count);
- $this->pageNavigation->setProperties($param);
- $this->pageNavigation->setLimit($limit);
- }
- TTransaction::close();
- $this->loaded = true;
- }
- catch(Exception $e)
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- $this->loaded = true;
- }
- function show()
- {
- if (!$this->loaded) {
- $this->onReload( func_get_arg(0) );
- }
- parent::show();
- }
- }
- </code>
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!
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!
Dominando o Adianti Framework Quero me inscrever agora!
Faltou adicionar a grid à página.
Obrigado mais uma vez! esqueci desse detalhe rsrs