Jump to content

Archived

This topic is now archived and is closed to further replies.

Chrnos

[Resolvido] Editar Checkbox em DataGridView

Recommended Posts

Bom dia amigos, estou criando uma tela para liberar permissão de acesso a rotinas de acordo com o perfil do usuário logado. Para tanto, criei uma tela de permissão onde listo todas as rotinas do sistema, trazendo o código, o descritivo da rotina e um checkbox para habilitar/desabilitar acesso num DataGridView. A parte de carregar os dados no grid eu fiz sem problemas, e meu problema reside no passo seguinte.

 

Gostaria que através do DataGridView o usuário marcasse quais rotinas estão liberadas e, ao salvar, o programa lê-se todas as linhas do grid e linha a linha executasse a gravação dos dados na tabela.... fiz um for para ler baseado no total de linhas do grid e tals, mas por mais que eu altere o valor no grid de true pra false por exemplo, na hora de gravar, o valor que é passado na leitura é o valor carregado do banco... não sei se tem algum esquema para poder editar e capturar o valor do checkbox dentro do DataGridView.... alguém tem alguma dica quanto a isso?

 

Grato.

Share this post


Link to post
Share on other sites

No projeto windows que tenho aqui, trabalho com uma grid do Dev, mas acredito que a idéia seja a mesma.

 

            
for (int i = 0; i < itens.Count; i++)
{
 if (itens[i].IMPRIMIR == true)
   listaImpressao.Add(itens[i]);
}

 

Onde itens é meu DataSource.

 

Abraços...

Share this post


Link to post
Share on other sites

Ai que está quintelab.... tentei utilizar a mesma lógica que usaria no Delphi: exibir os dados no datagridview, deixar o usuário marcar/desmarcar o checkbox que já existe no datagridview e depois varrer o mesmo do início ao fim e atualizar no banco linha a linha ... usei o código abaixo pra isso:

 

   	private void btnSalvar_Click(object sender, EventArgs e)
   	{
       	string message = "Confirma a alteração dos dados?";
       	string caption = "Atenção";
       	MessageBoxButtons buttons = MessageBoxButtons.YesNo;
       	DialogResult result;

       	result = MessageBox.Show(message, caption, buttons, MessageBoxIcon.Question);

       	if (result == DialogResult.Yes)
       	{
           	try
           	{
               	string  sNomeProcedure = "AFITACSP022";
               	string  sCodigoRotina;
               	Boolean bAcessoLiberado;
               	string[] vsParametros = { "@PsOperacao", "@PnCodigoPerfil", "@PnCodigoRotina", "@PbAcessoLiberado", "@PsLoginUsuario", "@PnErroProcessamento", "@PsMensagemErro" };
               	for (int iLinha = 0; iLinha < dgRotinasLiberadasPerfil.Rows.Count; iLinha++)
               	{
                   	sCodigoRotina   = Convert.ToString(dgRotinasLiberadasPerfil.Rows[iLinha].Cells["cnCodigoRotina"].Value);
                   	bAcessoLiberado = Convert.ToBoolean(dgRotinasLiberadasPerfil.Rows[iLinha].Cells["cbAcessoLiberado"].Value);
                   	string[] vsValoresEntrada = { "AI", PsCodigoPerfil, sCodigoRotina, bAcessoLiberado.ToString(), "", "", "" };
                   	bool[] vbOutPut = { false, false, false, false, false, true, true };
                   	string[] vsTipoDado = { "C", "L", "L", "B", "V", "T", "V" };
                   	string[,] sRetorno = accDB.Salvar(vsParametros, vsValoresEntrada, vbOutPut, vsTipoDado, sNomeProcedure);
                   	for (int i = 0; i < 2; i++)
                   	{
                       	if (sRetorno[i, 0] == "@PnErroProcessamento")
                       	{
                           	iLinha = dgRotinasLiberadasPerfil.Rows.Count;
                       	}
                   	}
               	}
               	AtualizaGrid();
           	}
           	catch (Exception ex)
           	{
               	MessageBox.Show("Erro " + ex.Message);
           	}
       	}
   	}

 

O problema é: independente do que é exibido no grid, o que é passado para a rotina de atualização é o valor carrega inicialmente... isto é, se eu carreguei no perfil uma rotina com acesso liberado e cliquei no checkbox para desmarcar, o valor retornado na linha bAcessoLiberado = Convert.ToBoolean(dgRotinasLiberadasPerfil.Rows[iLinha].Cells["cbAcessoLiberado"].Value); continua sendo o valor carregado do banco, não o valor atual do checkbox... então, se a rotina estava bloqueada e eu estou liberando o acesso, ela continua bloqueada, e vice-versa.... alguém sabe o que estou fazendo de errado?

Share this post


Link to post
Share on other sites

Na web eu consigo localizar o controle, não tenho certeza se o mesmo é possível em windows. Veja se consegue algo do tipo:

 

CheckBox chk = dgRotinasLiberadasPerfil.Rows[iLinha].Cells["cbAcessoLiberado"].Controls[0] as CheckBox;

 

Abraços...

Share this post


Link to post
Share on other sites

Falta de tempo me atrasa -_-''

 

Mas encontrei onde está o problema... no código que montei inicialmente usei esta linha de código abaixo....

 

bAcessoLiberado = Convert.ToBoolean(dgRotinasLiberadasPerfil.Rows[iLinha].Cells["cbAcessoLiberado"].Value);

 

Quando deveria ser assim....

 

bAcessoLiberado = Convert.ToBoolean(dgRotinasLiberadasPerfil.Rows[iLinha].Cells["cbAcessoLiberado"].EditedFormattedValue);

 

Problema resolvido.

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.