Usuário com melhor resposta
C# Depois de filtar DataView, clicar sobre o elemento e salva-lo em XML

Pergunta
-
Bom é o seguinte... Este são os métodos que encabeção meu arquivo responsável por gerir o banco xml.
private void CarregaGridPendente() { PendentesXML bancoPesquisa = new PendentesXML(); DataView viewPesquisa = bancoPesquisa.PesquisaPendente().DefaultView; dataGridClientes.DataSource = viewPesquisa; viewPesquisa = null; bancoPesquisa = null; } public void Consulta(string nomeCampo, string campo) { PendentesXML bancoPesquisa = new PendentesXML(); DataView viewPesquisa = bancoPesquisa.PesquisaPendente().DefaultView; viewPesquisa.RowFilter = nomeCampo + " LIKE '%" + campo.Trim() + "%'"; dataGridClientes.DataSource = viewPesquisa; viewPesquisa = null; bancoPesquisa = null; }
Existem alguns campos que eu uso para pesquisa e eu passo os parâmetros contidos neste campo para o método Consulta. Depois disso a eu consigo visualizar a minha grid de forma perfeita, tudo certo, mas quando eu clico duas vezes sobre um elemento para gravá-lo em um outro xml, o elemento gravado não é o selecionado, é com se a visualização estivesse atualizada mas os campos não... Segue o bloco de código responsável pelo clique duplo.private void dataGridClientes_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (Global.UsuarioLogado == "capessoa" || Global.UsuarioLogado == "Freud") { PendentesXML gravaXML = new PendentesXML(); DepositoXML adiciona = new DepositoXML(); Boolean resultado = false; Boolean resultado2 = false; DataView dataGridClientes = gravaXML.PesquisaPendente().DefaultView; DataRowView linhaRegistro = dataGridClientes[e.RowIndex]; //consultaNome.Text = linhaRegistro.Row["Nome"].ToString(); apenas testando o código if (MessageBox.Show("Tem certeza que deseja remover a restrição de " + linhaRegistro.Row["Nome"] + "?", "REMOVER RESTRIÇÃO", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { if (MessageBox.Show("O cliente " + linhaRegistro.Row["Nome"] + " voltará a ser mensalista?", "REATIVAR CADASTRO", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { resultado = adiciona.InsereRegistro(linhaRegistro.Row["Codigo"].ToString(), linhaRegistro.Row["Ano"].ToString(), linhaRegistro.Row["Bairro"].ToString(), linhaRegistro.Row["Celular"].ToString(), linhaRegistro.Row["CEP"].ToString(), linhaRegistro.Row["Complemento"].ToString(), linhaRegistro.Row["CPF"].ToString(), linhaRegistro.Row["Fabricante"].ToString(), linhaRegistro.Row["Logradouro"].ToString(), linhaRegistro.Row["Modelo"].ToString(), linhaRegistro.Row["Nome"].ToString(), linhaRegistro.Row["Numero"].ToString(), linhaRegistro.Row["Placa"].ToString(), linhaRegistro.Row["Recado"].ToString(), linhaRegistro.Row["RG"].ToString(), linhaRegistro.Row["Telefone"].ToString(), linhaRegistro.Row["Municipio"].ToString(), linhaRegistro.Row["Cor"].ToString(), DateTime.Now.AddYears(-20).AddDays(-3).ToString("dd/MM/yyyy"), linhaRegistro.Row["Tipo"].ToString(), linhaRegistro.Row["UF"].ToString()); if (resultado == true) { MessageBox.Show("Cliente re-cadastrado com sucesso!"); } else { MessageBox.Show("Falha ao re-cadastrar cliente!"); } } resultado2 = gravaXML.ExcluiPendente("CPF", linhaRegistro["CPF"].ToString()); if (resultado2) { MessageBox.Show("O cliente está em dia com o estacionamento agora!"); CarregaGridPendente(); } else { MessageBox.Show("Falha ao remover restrição!"); } gravaXML = null; adiciona = null; } }
Desde já agradeço a ajuda...
Abraços
Respostas
-
Caro Malange, consegui realizar esta operação da seguinte forma.
Eu criei uma variável no escopo da função principal chamada "indice" e no evento clique da DataGrid eu altero o indice para o DataRow.SelectedIndex. Aí no momento em que eu clico duas vezes eu pego o DataRow.Rows[indice] e assim consigo selecionar o elemento correto.
Simples assim. Porém quando se está com sono, prazo apertado e focado demais em um único problema, até as soluções mais óbvias se tornam invisíveis. Não sei se é a solução mais elegante, até porque sou novo no C# e não creio que os Engenheiros da Microsoft ainda não tenham pensado em uma função para realizar esta tarefa tão simples.
Fica aí a idéia. Se por acaso alguém soubre uma forma mais elegante de realizar esta operação, não deixe de postá-la.
César Augusto Pessôa - Análise e Desenvolvimento de Sistemas- Marcado como Resposta capfg terça-feira, 24 de janeiro de 2012 01:40
Todas as Respostas
-
-
Caro Malange, consegui realizar esta operação da seguinte forma.
Eu criei uma variável no escopo da função principal chamada "indice" e no evento clique da DataGrid eu altero o indice para o DataRow.SelectedIndex. Aí no momento em que eu clico duas vezes eu pego o DataRow.Rows[indice] e assim consigo selecionar o elemento correto.
Simples assim. Porém quando se está com sono, prazo apertado e focado demais em um único problema, até as soluções mais óbvias se tornam invisíveis. Não sei se é a solução mais elegante, até porque sou novo no C# e não creio que os Engenheiros da Microsoft ainda não tenham pensado em uma função para realizar esta tarefa tão simples.
Fica aí a idéia. Se por acaso alguém soubre uma forma mais elegante de realizar esta operação, não deixe de postá-la.
César Augusto Pessôa - Análise e Desenvolvimento de Sistemas- Marcado como Resposta capfg terça-feira, 24 de janeiro de 2012 01:40