Prezados,
Criei um grid em que o usuário deverá selecionar um ou mais de um checkbox e depois clicar no botão "Alterar Dados". Todas as informações "checadas" devem ser alteradas/incluídas na base de dados.
Estou usando o evento "onChange" relacionado ao addCheckColumn. Entretanto, não sei como fazer para armazenar os dados quando ocorrer seleção de mais de um item, habilitar o botão "alterar dados" e proceder com as alterações no banco. Vide mais detalhes abaixo:
Arquivo "cadastro.php"
define('REQUIRED_FIELD_MARK', '*'); // alterar a identificaзгo dos campos obrigatуrios para * vermelho
$frm = new TForm('Cadastro de Registro de Material', 550,780);
echo $frm->getCurrentContainer();
$frm->addHiddenField('pk_cod_registro');
$frm->setColumns(120); // define a primeira coluna do formulбrio para 60 px
$pc = $frm->addPageControl('pc', null, null, null, 'abaClick()');
//Aba - CADASTRO
...
//Aba - PESQUISA
$page = $pc->addPage('Pesquisa - RM', FALSE, TRUE, 'abaPesquisa');
$page->setColumns(100); // define a primeira coluna do formulбrio da aba para 80 px
// o atributo noclear evita que a funзгo fwClearFields limpe o campo
$frm->addTextField('pesquisaRM','Registro de Material:',50,false)->setAttribute('noclear','true')->setTooltip('Pesquisar - Informe o nome ou parte do nome e clique no botão Pesquisar!');
$frm->addButton('Pesquisar',null,'btnPesquisar','atualizarGride()',null,false,false);
$frm->addButton('Transferir RM',null,'btnTransferir',null,null,false,false)->setEnabled(FALSE);
$frm->addHtmlField('html_gride');
$frm->closeGroup();
$frm->processAction();
$frm->show();
Arquivo "criar_gride"
<?php
$pesquisaRM = '';
if ($_POST['pesquisaRM']) {
$pesquisaRM = $_POST['pesquisaRM'];
}
$dados = Tb_registroDAO::selecionar($pesquisaRM);
$g = new TGrid('gd', 'Materiais', $dados, NULL, NULL, 'pk_cod_registro');
$g->addColumn('txt_registro', 'Registro', 200, 'left');
$g->addColumn('txt_descriminacao', 'Descriminação', 400, 'left');
$g->addColumn('txt_nome', 'Setor', 300, 'left');
$g->addCheckColumn('alteraRM', 'Selecionar', 'pk_cod_registro', NULL, FALSE, FALSE)->addEvent('onChange', 'selecionaRM(this)');
$g->addButton('Alterar', NULL, 'btnAlterar', 'grideAlterar()', NULL, 'editar.gif', NULL, 'Alterar registro de material');
$g->show();
?>
<script>
function selecionaRM(rm) {
var sn = rm.checked ? 'S' : 'N';
}
</script>
Obrigada deste já pela ajuda,
Aline.
Autor: Paiva Macena
66 comentários
$dado = $_POST['alteraRM']; //caminhando pelas linhas do Grid que foram selecionadas
for ($i = 0; $i < count($dado); $i++) {
$reg[$i] = Tb_registro_material_rmaDAO::selecionarDado($dado[$i]);
} Obrigada pela dica. Gostaria de aproveitar a oportunidade e tirar só uma dúvida ainda quanto ao campo checkbox: Há possibilidade de quando o usuário clicar no checkbox que um SelectField seja exibido ao lado de outro campo do grid para que o usuário possa alterar uma informação? Caso positivo, como posso fazer a modificação no código abaixo para que quando o checkbox seja selecionado acrescente um SelectColumn em outro campo (e não ao lado do checkbox)? <?php $pesquisaRM = '';
if ($_POST['pesquisaRM']) {
$pesquisaRM = $_POST['pesquisaRM'];
} $dados = Tb_registro_material_rmaDAO::selecionarRegistro($pesquisaRM);
$g = new TGrid('gd', 'Materiais', $dados, NULL, NULL, 'PK_COD_REGISTRO');
$g->addColumn('txt_registro', 'Registro', 200, 'left');
$g->addColumn('txt_descriminacao', 'Descriminação', 400, 'left');
$g->addColumn('txt_nome', 'Setor', 300, 'left');
$g->addCheckColumn('alteraRM', 'Selecionar', 'PK_COD_REGISTRO_MATERIAL_RMA', NULL, FALSE, TRUE)->addEvent('onClick','chkClic()');
$g->addButton('Alterar', NULL, 'btnAlterar', 'grideAlterar()', NULL, 'editar.gif', NULL, 'Alterar registro');
$g->show(); ?> <script>
function chkClic(e, linha)
{
// criar o campo texto
if( jQuery(e).is(':checked') )
{
jQuery(e).parent().append('<input class="fwField" style="border:1px solid #c0c0c0" id="'+e.id+'_texto" type="text" size="30" value="">');
}
else // remover o campo texto
{
jQuery("#"+e.id+'_texto').remove();
}
} OBS.: o SelectColumn deverá ter um comportamento semelhando a outro ponto do código conforme trecho a seguir e exibido ao lado do coluna "txt_nome" do grid: $frm->addSelectField('fk_cod', 'Setor: ', TRUE, Tb_DAO::selectSetorAtivo('TXT_NOME'), null, null, null, null, null, 200, '-- Selecione um grupo --'); Obrigada, Aline.
$frm = new TForm('Exemplo Gride DrawCell',300,500); // simulação de dados para o gride
$dados = null;
$dados['ID_TABELA'][] = 1;
$dados['NM_TABELA'][] = 'Linha1';
$dados['ST_TABELA'][] = 'S';
$dados['SIT_OPCOES'][] = '1=>Um,2=>Dois'; $dados['ID_TABELA'][] = 2;
$dados['NM_TABELA'][] = 'Linha2';
$dados['ST_TABELA'][] = 'S';
$dados['SIT_OPCOES'][] = '3=Tres,4=>Quatro'; $gride = new TGrid( 'gdTeste' // id do gride
,'Título do Gride' // titulo do gride
,$dados // array de dados
,null // altura do gride
,null // largura do gride
,'ID_TABELA'// chave primaria
); $gride->addCheckColumn('st_tabela','Selecione','ST_TABELA','NM_TABELA')->setEvent('onClick','chkClic()');
$gride->addColumn('nm_tabela','Nome',100,'left');
$gride->addSelectColumn('sit_opcoes' ,'Opções','SIT_OPCOES','1=Amarelo,2=Verde'); // função de callback da criação das celulas
$gride->setOnDrawCell('gdAoDesenharCelula'); // campo html para exibir o gride
$frm->addHtmlField('gride',$gride); // exibir o formulário
$frm->show(); function gdAoDesenharCelula($rowNum,$cell,$objColumn,$aData,$edit)
{
if( $objColumn->getFieldName() == 'SIT_OPCOES')
{
$edit->setVisible( false );
} }
?>
<script>
function chkClic(e, linha)
{
// mostrar o campo select
if( jQuery(e).is(':checked') )
{
jQuery("#sit_opcoes_"+linha).show();
}
else // esconder o campo select
{
jQuery("#sit_opcoes_"+linha).hide(); }
}
</script> Abraço.
{
// mostrar o campo select
if( jQuery(e).is(':checked') )
{
jQuery("#sit_opcoes_"+linha).show(); // mostrar o botão alterar da linha
jQuery("#gdteste_td_"+linha+" img").show(); // se tiver utilizando imagem
//jQuery("#gdteste_td_"+linha+" button").show(); // se não estiver utilizando imagem
}
else // esconder o botao alterar e o campo select
{
jQuery("#sit_opcoes_"+linha).hide();
jQuery("#gdteste_td_"+linha+" img").hide(); // se tiver utilizando imagem
//jQuery("#gdteste_td_"+linha+" button").hide(); // se não tiver utilizando imagem
}
} function grideAlterar(fields, values, idGride, linha)
{
alert( 'Alterar...');
} // esconder todos os botoes alterar ao iniciar o formulário
jQuery("[name=btnAlterar]").each(
function()
{
jQuery(this).hide();
}
) Abraço.