Como implementar busca de cidades Como posso fazer com que o campo de estado (TDBCombo) preencha os campos cidades (TDBMultiSearch), como faço no AJAX, preenchimento automático, quando escolho o Estado? $estado = new TDBCombo('estado', 'smart', 'Uf', 'id', 'ds_uf_sigla'); $criteria = new TCriteria; $criteria->add(new TFilter('id_uf', '=', 'Null')); $cidades = new TDBMult...
AL
Como implementar busca de cidades  
Fechado
Como posso fazer com que o campo de estado (TDBCombo) preencha os campos cidades (TDBMultiSearch), como faço no AJAX, preenchimento automático, quando escolho o Estado?

$estado = new TDBCombo('estado', 'smart', 'Uf', 'id', 'ds_uf_sigla');

$criteria = new TCriteria;
$criteria->add(new TFilter('id_uf', '=', 'Null'));

$cidades = new TDBMultiSearch('cidades', 'smart', 'Cidade', 'id', 'ds_cidade_nome', '', $criteria);
$cidades->setMinLength(2);
$cidades->setSize(280,30);

Obrigado!

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


AL

Encontrei a solução, vou adicionar a function onExitAction no TCOMBO, e fazer a busca ao sair da seleção da combo!
FC

Só seguir esse exemplo
www.adianti.com.br/framework_files/tutor/index.php?class=FormInterac
AL

Felipe, tentei seguir este exemplo, percebi que o que estou usando é uma combo que após selecionar o estado, coloca as cidades que pertencem a ele em ou MultiSearch, para ficarem em um tipo texto, e depois salvo na base de dados como texto e não os IDs das cidades.
E no sistema não tem uma ExitAction para Combo, por isso implementei esta function na classe TBCombo, que é o que utilizo normalmente em meus sistemas com SELECT e AJAX, muito simples de usar.
Ainda não montei, mais vou ver se dá certo, certo?

Obrigado
FC

Então após vc selecionar o estado na combo use o evento onComboChange para carregar o TMultiSearch veja que o exemplo que te mostrei faz exatamente isso carrega a combo baseado numa escolha. No seu caso é só troca a Tcombo pelo TMultiSearch.
AL


Meu código inteiro do formulário é este!

Não estou entendendo aonde colocar o onComboChange?

 
  1. <?php
  2. class RegiaoFormDataGrid extends TPage
  3. {
  4. private $form;
  5. private $datagrid;
  6. private $loaded;
  7. public function __construct()
  8. {
  9. parent::__construct();
  10. //cria formulário
  11. $this->form = new TQuickForm('form_regiaogrid');
  12. //CSS Class
  13. $this->form->class = 'tform';
  14. //titulo do formulário
  15. $this->form->setFormTitle('Regiões de Vendas');
  16. //Declara os Campos do formulário
  17. $id = new TEntry('id');
  18. $nome = new TEntry('nome_regiao');
  19. $nome->addValidation('Nome da Região', new TRequiredValidator);
  20. $estado = new TDBCombo('estado', 'smart', 'Uf', 'id', 'ds_uf_sigla');
  21. $cidades = new TMultiSearch('cidades');
  22. $cidades->setMinLength(2);
  23. $cidades->setSize(280,30);
  24. //adiciona os campos no formulário
  25. $this->form->addQuickField('ID', $id, 40 );
  26. $this->form->addQuickField('Nome da Região', $nome, 240 );
  27. $this->form->addQuickField('Estados', $estado, 100);
  28. $this->form->addQuickField('Cidades da Região', $cidades, 220);
  29. //define as ações de estados
  30. $exit_action = new TAction(array($this, 'onChangeAction'));
  31. $estado->setChangeAction($exit_action);
  32. //define a ação do formulário
  33. $this->form->addQuickAction('Salvar', new TAction(array($this, 'onSave')), 'ico_save.png');
  34. $this->form->addQuickAction('Novo', new TAction(array($this, 'onClear')), 'ico_new.png');
  35. //torna o campo não editável
  36. $id->setEditable(FALSE);
  37. //instancia objeto datagrid
  38. $this->datagrid = new TQuickGrid;
  39. $this->datagrid->style = 'width: 100%';
  40. $this->datagrid->setHeight(320);
  41. //adiciona as colunas
  42. $this->datagrid->addQuickColumn('ID', 'id', 'center', 50, new TAction(array($this, 'onReload')), array('order', 'id'));
  43. $this->datagrid->addQuickColumn('Nome da Região', 'nome_regiao', 'left', 250, new TAction(array($this, 'onReload')), array('order', 'nome_regiao'));
  44. $this->datagrid->addQuickColumn('Estado', 'uf', 'center', 20, new TAction(array($this, 'onReload')));
  45. $this->datagrid->addQuickColumn('Cidades da Região', 'cidades' , 'center', 400, new TAction(array($this, 'onReload')));
  46. //adiciona ações
  47. $this->datagrid->addQuickAction('Editar', new TDataGridAction(array($this, 'onEdit')), 'id', 'ico_edit.png');
  48. $this->datagrid->addQuickAction('Deletar', new TDataGridAction(array($this, 'onDelete')), 'id', 'ico_delete.png');
  49. //cria a estrutura do Datagrid
  50. $this->datagrid->createModel();
  51. //Cria um container para os objetos
  52. $vbox = new TVBox;
  53. $vbox->add($this->form);
  54. parent::add($vbox);
  55. $vbox1 = new TVBox;
  56. $vbox1->add($this->datagrid);
  57. parent::add($vbox1);
  58. }
  59. function show()
  60. {
  61. if (!$this->loaded)
  62. {
  63. $this->onReload( func_get_arg(0) );
  64. }
  65. parent::show();
  66. }
  67. public static function onChangeAction($param)
  68. {
  69. $key = $param['key'];
  70. TTransaction::open('smart');
  71. $criteria = new TCriteria;
  72. $criteria->add(new TFilter('id_uf', '=', $key ));
  73. $repository = new TRepository('Cidade');
  74. $cidades = $repository->load($criteria);
  75. foreach ($cidades as $cidade)
  76. {
  77. $options = $cidade->ds_cidade_nome;
  78. }
  79. //envia os dados ao formulário
  80. TForm::sendData('form_regiaogrid', 'cidades', $options);
  81. TTransaction::close();
  82. }
  83. function onReload($param = NULL)
  84. {
  85. try
  86. {
  87. //abre a base de dados
  88. TTransaction::open('smart');
  89. //cria repositorio
  90. $repository = new TRepository('Regiao');
  91. //cria criterio para selecao de registros
  92. $criteria = new TCriteria;
  93. $order = isset($param['order']) ? $param['order'] : 'id';
  94. $criteria->setProperty('order', $order);
  95. //carrega os dados
  96. $regioes = $repository->load($criteria);
  97. //limpa datagrid
  98. $this->datagrid->clear();
  99. if ($regioes)
  100. {
  101. foreach($regioes as $regiao)
  102. {
  103. $this->datagrid->addItem($regiao);
  104. }
  105. }
  106. TTransaction::close();
  107. $this->loaded = true;
  108. }
  109. catch (Exception $e)
  110. {
  111. new TMessage('erros', '<b>Error</b> ' . $e->getMessage());
  112. TTransaction::rollback();
  113. }
  114. }
  115. function onSave()
  116. {
  117. try
  118. {
  119. TTransaction::open('smart');
  120. $regiao = $this->form->getData('Regiao');
  121. //salva os registros
  122. $regiao->store();
  123. TTransaction::close();
  124. new TMessage('info', 'Registro Salvo');
  125. $this->onReload();
  126. }
  127. catch (Exception $e)
  128. {
  129. new TMessage('error', $e->getMessage());
  130. TTransaction::rollback();
  131. }
  132. }
  133. public function onClear()
  134. {
  135. $this->form->clear();
  136. }
  137. function onEdit($param)
  138. {
  139. try
  140. {
  141. if (isset($param['key']))
  142. {
  143. $key = $param['key'];
  144. TTransaction::open('smart');
  145. $regioes = new Regiao($key);
  146. $this->form->setData($regioes);
  147. TTransaction::close();
  148. $this->onReload();
  149. }
  150. else
  151. {
  152. $this->form->clear();
  153. }
  154. }
  155. catch (Exception $e)
  156. {
  157. new TMessage('error', $e->getMessage());
  158. TTransaction::rollback();
  159. }
  160. }
  161. function onDelete($param)
  162. {
  163. $action = new TAction(array($this, 'Delete'));
  164. $action->setParameters($param);
  165. new TQuestion('Deseja realmente excluir o registro', $action);
  166. }
  167. function Delete($param)
  168. {
  169. try
  170. {
  171. $key = $param['key'];
  172. TTransaction::open('smart');
  173. $regioes = new Regiao($key);
  174. $regioes->delete();
  175. TTransaction::close();
  176. $this->onReload( $param );
  177. new TMessage('info', "Registro Excluido");
  178. }
  179. catch (Exception $e)
  180. {
  181. new TMessage('error', $e->getMessage());
  182. TTransaction::rollback();
  183. }
  184. }
  185. }
  186. ?>


Obrigado.
FC

é preciso dar um var_dump dentro do onComboChange leia esse tópico www.adianti.com.br/forum/pt/view_1149?tcombo-onchangeaction esse param['key'] está trazendo o id da tabela uf ? não esqueça de indexar o vetor ok. tem esse outro post que pode ajudar www.adianti.com.br/forum/pt/view_1243?tratar-dados-do-tmultisearch
AL

Bom vou te explicar o que quero.

Quero trazer os Estados de uma tabela "Uf" no BD, de acordo com o estado, quero popular o TMultSearch com as cidades da tabela "Cidade" e dentro do MultSearch escolher as cidades do estado que vão pertencer a Região de Vendas.
Não estou conseguindo popular o TMultisearch com o resultado da lista com o Options, fiz esta osnChangeAction e não funciona, mais o $option está carregado com as cidades que quero colocar na TMultiSearch.

public static function onChangeAction($param)
{

$key = $param['key'];

TTransaction::open('smart');

$criteria = new TCriteria;
$criteria->add(new TFilter('id_uf', '=', $key ));

$repository = new TRepository('Cidade');
$cidades = $repository->load($criteria);

foreach ($cidades as $cidade)
{
$options[] = $cidade->ds_cidade_nome;
}

TTransaction::close();

//envia os dados ao formulário
TCombo::reload('form_regiaogrid', 'cidades', $options);

}
FC

Eu entendi desde o começo porém olha seu código está dando o reload numa combo e não está indexando seu vetor.

O TMultiSearch não possui a função onReload nativa como a Tcombo vai ter que usar o TForm::sendData mas acredito que para funcionar vai precisar indexar o vetor.
AL

Felipe, me desculpe, o que é indexar vetor?
FC

$options[$cidade->id] = $cidade->ds_cidade_nome;

É criar um índice deve funcionar assim.
AL

Felipe, fiz desta forma:

{

$key = $param['key'];

TTransaction::open('smart');

$criteria = new TCriteria;
$criteria->add(new TFilter('id_uf', '=', $key ));

$repository = new TRepository('Cidade');
$cidades = $repository->load($criteria);

foreach ($cidades as $cidade)
{
$options[$cidade->id] = $cidade->ds_cidade_nome;
}

TTransaction::close();

//envia os dados ao formulário
TForm::sendData('form_regiaogrid', $options);

}
Mais não mandou os campos para a TMultiSearch.

Tem como substituir o TMultiSearch, no formulário, por um TDBMultiSearch, com um $criteria do id do estado?
FC

O problema é que não atualiza a pagina ou seja o criterio viria como nulo e não teria retorno, se fosse trocado o multisearch por uma combo resolveria esse problema com o tcombo::reload , mas acredito que falta um detalhe para funcionar ou é a variavel $options que não está declarada como objeto ou no foreach precisa passar o $key tem como me enviar seu projeto para eu analisar ? está em qual banco de dados?




AL

Felipe, bom dia, nunca utilizei um Framework, comprei o livro do adianti e já li ele todo para poder criar dúvidas, já desenvolvi sistemas com algumas classes que criei e que fui desenvolvendo desde 2012, e utilizo um Ajax muito simples que altera com um innerHtml o objeto na página e preenche os campos!
Com o adianti, verifiquei este campo muito interessante(MultiSearch), que fica mais fácil utilizar ao gravar os dados do banco dentro de um campo TEXT, evitando operações de associação com a base de Cidades, que a cada abertura de tela ou chamada de edição fazer buscas em outra tabela.
Então este campo ficaria com acesso a outra base, somente em caso de Edição e Alteração, e somente no estado que necessite, sem ter que carregar a base toda de cidades, na hora de escolher as cidades.
Se tivesse uma function reload na Classe TMultiSearch não resolveria?
FC

Exatamente !!! é isso que estamos fazendo de uma forma manual(sem mexer na classe), agora ja abriu a classe MultiSearch para ver como ela carrega os dados? confesso que eu não olhei. faz o seguinte olha esse exemplo www.adianti.com.br/framework_files/tutor/index.php?class=SearchBox ele parece que faz exatamente o que vc quer basta ajustar em vez de carregar do xml carregar do banco de dados com o filtro.

Olha o Adianti é uma ferramenta que facilita a vida de criações de aplicação de negocio que se resumem muito a listagens e formulários o foco é evitar o retrabalho de ficar reescrevendo códigos, claro cada projeto é diferente e o framework é bem flexivel podendo mudar suas classes facilmente.

Cabe vc analisar o seu projeto ajustar o MultiSearch a sua necessidade ou até mesmo criar o seu, esta liberdade que é bacana pois não existe nenhum projeto igual ao outro.

Boa sorte senão conseguir avisa que tento montar um exemplo.
FC

Montei esse exemplo só salvar no control do tutor

 
  1. <?php
  2. /**
  3. * Search Box
  4. *
  5. * @version 1.0
  6. * @package samples
  7. * @subpackage tutor
  8. * @author Pablo Dall'Oglio
  9. * @copyright Copyright (c) 2006-2014 Adianti Solutions Ltd. (http://www.adianti.com.br)
  10. * @license http://www.adianti.com.br/framework-license
  11. */
  12. class SearchBoxP extends TPage
  13. {
  14. private $form;
  15. /**
  16. * Constructor method
  17. */
  18. public function __construct()
  19. {
  20. parent::__construct('search_box');
  21. $this->form = new TForm('form_box');
  22. $table = new TTable;
  23. $input = new TMultiSearch('input');
  24. $input->setSize(240,28);
  25. $input->addItems( TSession::getValue('programas'));
  26. $input->setMinLength(1);
  27. $input->setMaxSize(1);
  28. //$input->setChangeAction(new TAction(array('SearchBox', 'loadProgram')));
  29. $combo = new TCombo('estado');
  30. $combo_itens['3'] = 'Ate id 3';
  31. $combo_itens['6'] = 'Até id 6';
  32. $combo->addItems($combo_itens);
  33. $combo->setValue(TSession::getValue('estado'));
  34. $table->addRowSet( new TLabel('Estado:'), $combo );
  35. $table->addRowSet( new TLabel('Cidade:'), $input );
  36. $change_action = new TAction(array($this, 'getPrograms'));
  37. $combo->setChangeAction($change_action);
  38. $this->form->add($table);
  39. $this->form->setFields(array($input,$combo));
  40. parent::add($this->form);
  41. }
  42. /**
  43. * Returns an indexed array with all programs
  44. */
  45. public static function getPrograms($param)
  46. {
  47. TSession::setValue('estado', $param['estado']);
  48. TTransaction::open('samples');
  49. $repository = new TRepository('City');
  50. $citys = $repository->where('id', '<', $param['key'])
  51. ->load();
  52. $items = array();
  53. foreach ($citys as $item)
  54. {
  55. $items[$item->id] = $item->name;
  56. }
  57. TTransaction::close();
  58. TSession::setValue('programas',$items);
  59. TApplication::loadPage('SearchBoxP');
  60. }
  61. }
  62. ?>
AL

Felipe, não consegui colocar os dados dentro do retorno, montei desta forma a Classe:

 
  1. <?php
  2. /**
  3. * Search Box
  4. *
  5. * @version 1.0
  6. * @package samples
  7. * @subpackage tutor
  8. * @author Pablo Dall'Oglio
  9. * @copyright Copyright (c) 2006-2014 Adianti Solutions Ltd. (http://www.adianti.com.br)
  10. * @license http://www.adianti.com.br/framework-license
  11. */
  12. class SearchBoxP extends TPage
  13. {
  14. private $form;
  15. /**
  16. * Constructor method
  17. */
  18. public function __construct()
  19. {
  20. parent::__construct('search_box');
  21. $this->form = new TForm('form_box');
  22. $table = new TTable;
  23. $input = new TMultiSearch('input');
  24. $input->setSize(240,28);
  25. $input->addItems( TSession::getValue('programas'));
  26. $input->setMinLength(1);
  27. $input->setMaxSize(1);
  28. $input->setChangeAction(new TAction(array('SearchBox', 'loadProgram')));
  29. $combo = new TDBCombo('estado', 'smart', 'Uf', 'id', 'ds_uf_nome');
  30. $combo->setValue(TSession::getValue('estado'));
  31. $table->addRowSet( new TLabel('Estado:'), $combo );
  32. $table->addRowSet( new TLabel('Cidade:'), $input );
  33. $change_action = new TAction(array($this, 'getPrograms'));
  34. $combo->setChangeAction($change_action);
  35. $this->form->add($table);
  36. $this->form->setFields(array($input,$combo));
  37. parent::add($this->form);
  38. }
  39. /**
  40. * Returns an indexed array with all programs
  41. */
  42. public static function getPrograms($param)
  43. {
  44. TSession::setValue('estado', $param['key']);
  45. TTransaction::open('smart');
  46. $repository = new TRepository('Cidade');
  47. $citys = $repository->where('id_uf', '=', $param['key'])
  48. ->load();
  49. $items = array();
  50. foreach ($citys as $item)
  51. {
  52. $items[$item->id] = $item->name;
  53. }
  54. TTransaction::close();
  55. TSession::setValue('programas',$items);
  56. TApplication::loadPage('SearchBoxP');
  57. }
  58. }
  59. ?>
AL

Felipe, tem como transformar o TDBMultiSearch em TText, para salvar os dados como TEXT?
AL

Felipe, já resolvi com o implode e salvou corretamente no sistema, a única coisa que falta é selecionar o estado e preencher os MultiSsearch com as cidades somente do estado.

AL

Felipe, boa tarde, agradeço imensamente sua paciência e ajuda, ainda não consegui fazer com que a TDBCombo separe as cidades por estado na TDBMultiSearch, sem problemas, vou seguir no sistema para não perder mais tempo.
Mais está fazendo tudo que preciso, pois não guardo o ID das Cidades e sim os Nomes, então a Classe abaixo funciona bem, muito obrigado pelas dicas.

 
  1. <?php
  2. class RegiaoFormDataGrid extends TPage
  3. {
  4. private $form;
  5. private $datagrid;
  6. private $loaded;
  7. public function __construct()
  8. {
  9. parent::__construct();
  10. //cria formulário
  11. $this->form = new TQuickForm('form_regiaogrid');
  12. //CSS Class
  13. $this->form->class = 'tform';
  14. //titulo do formulário
  15. $this->form->setFormTitle('Regiões de Vendas');
  16. //Declara os Campos do formulário
  17. $id = new TEntry('id');
  18. $nome = new TEntry('nome_regiao');
  19. $nome->addValidation('Nome da Região', new TRequiredValidator);
  20. $estado = new TDBCombo('uf', 'smart', 'Uf', 'ds_uf_sigla', 'ds_uf_sigla');
  21. //define as ações de estados
  22. //$exit_action = new TAction(array($this, 'onChangeAction'));
  23. //$estado->setChangeAction($exit_action);
  24. $cidades = new TDBMultiSearch('cidades', 'smart', 'Cidade' ,'ds_cidade_nome', 'ds_cidade_nome');
  25. $cidades->setMinLength(2);
  26. $cidades->setSize(280,30);
  27. $cidades->setValue('ds_cidade_nome', $this->cidades);
  28. //echo '<pre>'.print_r($cidades).'</pre>';
  29. //adiciona os campos no formulário
  30. $this->form->addQuickField('ID', $id, 40 );
  31. $this->form->addQuickField('Nome da Região', $nome, 240 );
  32. $this->form->addQuickField('Estados', $estado, 100);
  33. $this->form->addQuickField('Cidades da Região', $cidades, 220);
  34. //define a ação do formulário
  35. $this->form->addQuickAction('Salvar', new TAction(array($this, 'onSave')), 'ico_save.png');
  36. $this->form->addQuickAction('Novo', new TAction(array($this, 'onClear')), 'ico_new.png');
  37. //torna o campo não editável
  38. $id->setEditable(FALSE);
  39. //instancia objeto datagrid
  40. $this->datagrid = new TQuickGrid;
  41. $this->datagrid->style = 'width: 100%';
  42. $this->datagrid->setHeight(320);
  43. //adiciona as colunas
  44. $this->datagrid->addQuickColumn('ID', 'id', 'center', 50, new TAction(array($this, 'onReload')), array('order', 'id'));
  45. $this->datagrid->addQuickColumn('Nome da Região', 'nome_regiao', 'left', 250, new TAction(array($this, 'onReload')), array('order', 'nome_regiao'));
  46. $this->datagrid->addQuickColumn('Estado', 'uf', 'center', 20, new TAction(array($this, 'onReload')));
  47. $this->datagrid->addQuickColumn('Cidades da Região', 'cidades' , 'left', 400, new TAction(array($this, 'onReload')));
  48. //adiciona ações
  49. $this->datagrid->addQuickAction('Editar', new TDataGridAction(array($this, 'onEdit')), 'id', 'ico_edit.png');
  50. $this->datagrid->addQuickAction('Deletar', new TDataGridAction(array($this, 'onDelete')), 'id', 'ico_delete.png');
  51. //cria a estrutura do Datagrid
  52. $this->datagrid->createModel();
  53. //Cria um container para os objetos
  54. $vbox = new TVBox;
  55. $vbox->add($this->form);
  56. parent::add($vbox);
  57. $vbox1 = new TVBox;
  58. $vbox1->add($this->datagrid);
  59. parent::add($vbox1);
  60. }
  61. function show()
  62. {
  63. if (!$this->loaded)
  64. {
  65. $this->onReload( func_get_arg(0) );
  66. }
  67. parent::show();
  68. }
  69. public static function onChangeAction($param)
  70. {
  71. $key = $param['key'];
  72. TTransaction::open('smart');
  73. $criteria = new TCriteria;
  74. $criteria->add(new TFilter('id_uf', '=', $key ));
  75. $repository = new TRepository('Cidade');
  76. $cidades = $repository->load($criteria);
  77. foreach ($cidades as $cidade)
  78. {
  79. $options[$cidade->id] = $cidade->ds_cidade_nome;
  80. }
  81. TTransaction::close();
  82. //envia os dados ao formulário
  83. TMultiSearch::treatData($options);
  84. }
  85. function onReload($param = NULL)
  86. {
  87. try
  88. {
  89. //abre a base de dados
  90. TTransaction::open('smart');
  91. //cria repositorio
  92. $repository = new TRepository('Regiao');
  93. //cria criterio para selecao de registros
  94. $criteria = new TCriteria;
  95. $order = isset($param['order']) ? $param['order'] : 'id';
  96. $criteria->setProperty('order', $order);
  97. //carrega os dados
  98. $regioes = $repository->load($criteria);
  99. //limpa datagrid
  100. $this->datagrid->clear();
  101. if ($regioes)
  102. {
  103. foreach($regioes as $regiao)
  104. {
  105. $this->datagrid->addItem($regiao);
  106. }
  107. }
  108. TTransaction::close();
  109. $this->loaded = true;
  110. }
  111. catch (Exception $e)
  112. {
  113. new TMessage('erros', '<b>Error</b> ' . $e->getMessage());
  114. TTransaction::rollback();
  115. }
  116. }
  117. function onSave()
  118. {
  119. try
  120. {
  121. //abre transação
  122. TTransaction::open('smart');
  123. $regiao = $this->form->getData('Regiao');
  124. $regiao->cidades = implode(", ", $regiao->cidades);
  125. //mantém os dados no form após postagem
  126. $this->form->setData($regiao);
  127. //salva os registros
  128. $regiao->store();
  129. //fecha a transação
  130. TTransaction::close();
  131. new TMessage('info', 'Registro Salvo');
  132. $this->onReload();
  133. }
  134. catch (Exception $e)
  135. {
  136. new TMessage('error', $e->getMessage());
  137. TTransaction::rollback();
  138. }
  139. }
  140. public function onClear()
  141. {
  142. $this->form->clear();
  143. }
  144. function onEdit($param)
  145. {
  146. try
  147. {
  148. if (isset($param['key']))
  149. {
  150. $key = $param['key'];
  151. TTransaction::open('smart');
  152. $regioes = new Regiao($key);
  153. $regioes->cidades = explode(',', $regioes->cidades);
  154. $this->form->setData($regioes);
  155. TTransaction::close();
  156. $this->onReload();
  157. }
  158. else
  159. {
  160. $this->form->clear();
  161. }
  162. }
  163. catch (Exception $e)
  164. {
  165. new TMessage('error', $e->getMessage());
  166. TTransaction::rollback();
  167. }
  168. }
  169. function onDelete($param)
  170. {
  171. $action = new TAction(array($this, 'Delete'));
  172. $action->setParameters($param);
  173. new TQuestion('Deseja realmente excluir o registro', $action);
  174. }
  175. function Delete($param)
  176. {
  177. try
  178. {
  179. $key = $param['key'];
  180. TTransaction::open('smart');
  181. $regioes = new Regiao($key);
  182. $regioes->delete();
  183. TTransaction::close();
  184. $this->onReload( $param );
  185. new TMessage('info', "Registro Excluido");
  186. }
  187. catch (Exception $e)
  188. {
  189. new TMessage('error', $e->getMessage());
  190. TTransaction::rollback();
  191. }
  192. }
  193. }
FC

É pq VC precisa usar a TMultisearch e não TDB testa aí o exemplo que passei fazia o filtro.
AL

Carrega uma Cidade, mais não carrega todas as cidades do Estado!
PD

Antonio,

Não é possível fazer a TDBCombo pré-filtrar a TDBMultiSearch, pois a TDBMultiSearch trabalha com filtros pré-definidos, não dinâmicos.
Eu respondi à isso de maneira mais completa neste outro post:
www.adianti.com.br/forum/pt/view_2041?filtragem-de-municipios-usando

A recomendação é usar somente TDBMultiSearch, apresentando o estado junto ao nome da cidade na busca, e usar apenas o ID da cidade.

Também sugiro usar um seek button para selecionar as cidades a partir de uma janela, como no cadastro de clientes:
www.adianti.com.br/framework_files/tutor/index.php?class=CustomerFor

Atenciosamente,
Pablo
AL

Muito obrigado pela informação, como o nome da cidade que é importante salvar no campo, não me importei com o id dela em acordo com o Estado, e funcionou bem, pois salvo no Banco de dados como campo TEXT.

Obrigado e até mais.