Chrnos 30 Denunciar post Postado Novembro 7, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Novembro 7, 2011 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... Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Novembro 8, 2011 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? Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Novembro 8, 2011 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... Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Novembro 15, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites