none
C# Depois de filtar DataView, clicar sobre o elemento e salva-lo em XML RRS feed

  • 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
     

    sexta-feira, 19 de agosto de 2011 18:58

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
    terça-feira, 24 de janeiro de 2012 01:39

Todas as Respostas

  • Como ficou seu problema?

     


    One word frees us of all the weight and pain of life: that word is love.
    domingo, 22 de janeiro de 2012 00:34
    Moderador
  • 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
    terça-feira, 24 de janeiro de 2012 01:39