none
DataGridView "Criar filtro para consulta e depois ...." RRS feed

  • Pergunta

  • Alô pessoal... blz? essa é o meu primeiro post aki, então desculpem minha falha se houver... sou novo na area de desenvolvimento

    Bom é o seguinte, criei um aplicativo com banco de dados, está funcionando quase tudo blz, só que tem um problema,

    quero que os registros corram (setando o teclado/mouse) tanto pelo dgv quanto pela textbox depois de clicado (já na tela de incluir/alterar/excluir)

    Blz usando o binding source position isso é possível, mas se eu usar o filtro para consultar, no doubleclick o resultado lançado no textbox é diferente...

    o registro que aparece no DGV não é igual ao do bs, já tentei quase tudo mas não acho um jeito de consertar isso.

    Ex.: (No Dgv aparece na 3ª linha "Maria Helena etc..."  no text aparece "Joaquim Alves..." pq esse foi o 3º cadastro do banco.. esse tá sendo o problema.

     

    Fiz uma tentativa usando o event CellContentDoubleClick, (a referência usada foi toda pelo dgv) ai corrigiu o problema da diferença dos registros,

    mas agora na tela de alteração já não consigo 'setar' os registros. Por favor quem puder me ajudar agradeço, sei que é 'cabacice', mas por isso tô insistindo pra aprender. desculpa ai se ta longa d+++, tentei ser o + detalhista possível.

     


    quinta-feira, 26 de maio de 2011 12:38

Respostas

Todas as Respostas

  • Neoshao,

    Você está bindando os seus controles no mesmo bindingsource do seu grid? Acho que o problema pode ser este.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 31 de maio de 2011 18:25
    Moderador
  • É isso mesmo cara, tô usando o bs que carrega o gridview pros controles, mas se puder dar uma dica ai eu agradeço, pq até fiz uns testes aki, pra ver se arrumava, só que não deu certo... Vlw!
    terça-feira, 31 de maio de 2011 18:59
  • Neoshao,

    Se possível poste o seu código para podermos analisar melhor o seu problema.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    sexta-feira, 3 de junho de 2011 16:54
    Moderador
  • Segue ai o bloco de código no qual eu consigo na filtragem do textbox consultar o registro correto e lança-lo em outro campo, mas dessa forma não estou conseguindo correr pelos registros no segundo campo aonde foi carregado os valores...

    private void CarregarDatagrid()
            {
                        DtCliente.Clear();
                        OleDbDataAdapter DaCliente = new OleDbDataAdapter("Select * From Clientes", Conn);
                        DaCliente.Fill(DtCliente);
                        if (Conn.State == ConnectionState.Open) Conn.Close();
                        BsCliente.DataSource = DtCliente;
                        DgvCliente.DataSource = BsCliente;
                        DaCliente.Dispose();

             }

    _____________________________________________________________________________________________________________________

    private void Contador()   // chamada para reconhecer a 'Tab' atual e mostrar a contagem correta de registros...
            {
                if (TbAbas.SelectedIndex == 0 | TbAbas.SelectedIndex == 2)
                {
                    LblNavegacao.Text = (BsCliente.Position + 1) + " de " + BsCliente.Count;
                }
                else
                {
                    LblNavegacao.Text = (BsProduto.Position + 1) + " de " + BsProduto.Count;
                }
            }

    _____________________________________________________________________________________________________________________

    private void DgvCliente_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                HabilitarGrupos(false, true, true, false);
                TbAbas.SelectedIndex = 2; TxtPesquisar.Text = string.Empty;

                if (DtCliente.Rows.Count != 0)
                {
                    LblNumCod.Text = DgvCliente.Rows[e.RowIndex].Cells[0].Value.ToString();
                    TxtNome.Text = DgvCliente.Rows[e.RowIndex].Cells[1].Value.ToString();
                    TxtEndereco.Text = DgvCliente.Rows[e.RowIndex].Cells[4].Value.ToString();
                    TxtComplemento.Text = DgvCliente.Rows[e.RowIndex].Cells[5].Value.ToString();
                    TxtBairro.Text = DgvCliente.Rows[e.RowIndex].Cells[2].Value.ToString();
                    TxtCidade.Text = DgvCliente.Rows[e.RowIndex].Cells[3].Value.ToString();
                    MskTxtTelRes.Text = DgvCliente.Rows[e.RowIndex].Cells[6].Value.ToString();
                    MskTxtTelCel.Text = DgvCliente.Rows[e.RowIndex].Cells[7].Value.ToString();
                    TxtEmail.Text = DgvCliente.Rows[e.RowIndex].Cells[8].Value.ToString();
                }
                else { MessageBox.Show( "Não existe registros no Banco de dados!"); }
            }

     

    private void BtnProximo_Click(object sender, EventArgs e)
            {
                BsCliente.MoveFirst(); BsProduto.MoveFirst(); Contador();
            }

    _____________________________________________________________________________________________________________________

    2º MODO...

    Essa foi a primeira forma que tentei, funciona muito bem, consigo correr os registros tanto pelo DGV quanto pelos textbox já carregados,

    mostrando a contagem e a posição correta dos mesmos. Só que quando faço um filtro nos registros e depois quero carregar um deles

    no campo seguinte, ele pega o index do registro como se fosse a tabela completa. (ex.: filtro mostra 03 registros com [MARIA], mas

    no load dos textbox ele mostra [ARNALDO])...

     

    private void PreencherCampos()
            {
                if (TabCtrl.SelectedIndex == 0 | TabCtrl.SelectedIndex == 2)
                {
                    if (DtCliente.Rows.Count != 0)
                    {                   
                        TxtCodCliente.Text = DtCliente.Rows[BsCliente.Position][0].ToString();
                        TxtNome.Text = DtCliente.Rows[BsCliente.Position][1].ToString();
                        TxtBairro.Text = DtCliente.Rows[BsCliente.Position][2].ToString();
                        TxtCidade.Text = DtCliente.Rows[BsCliente.Position][3].ToString();
                        TxtEndereco.Text = DtCliente.Rows[BsCliente.Position][4].ToString();
                        TxtComplemento.Text = DtCliente.Rows[BsCliente.Position][5].ToString();
                        MaskTxtTelRes.Text = DtCliente.Rows[BsCliente.Position][6].ToString();
                        MaskTxtTelCel.Text = DtCliente.Rows[BsCliente.Position][7].ToString();
                        TxtEmail.Text = DtCliente.Rows[BsCliente.Position][8].ToString();

                        LblNavegacao.Text = (BsCliente.Position + 1) + " de " + BsCliente.Count;
                    }
                    else
                    {
                        return;
                    }

    _____________________________________________________________________________________________________________________

    private void ReconhecerAbas()
            {
                //CarregarDados();
                if (TabCtrl.SelectedIndex == 0 | TabCtrl.SelectedIndex == 1)
                {
                    HabilitarGrupos(false, false, true, true);
                    LblNavegacao.Text = (BsProduto.Position + 1) + " de " + BsProduto.Count;
                    LblNavegacao.Text = (BsCliente.Position + 1) + " de " + BsCliente.Count;
                    this.BtnPrimeiro.Image = global::ConexaoBanco.Properties.Resources.upfirst_24x24;
                    this.BtnAnterior.Image = global::ConexaoBanco.Properties.Resources.upprevious_24x24;
                    this.BtnProximo.Image = global::ConexaoBanco.Properties.Resources.downnext_24x24;
                    this.BtnUltimo.Image = global::ConexaoBanco.Properties.Resources.downlast_24x24;
                }

    _____________________________________________________________________________________________________________________

    private void Dgv_DoubleClick(object sender, EventArgs e)
            {  
                //BsCliente.Position = DgvCliente.CurrentRow.Index;
                PreencherCampos();
                TabCtrl.SelectedIndex = 2;
                LblNavegacao.Text = (DgvCliente.CurrentRow.Index + 1).ToString() + " de " + BsCliente.Count;
            }

    _____________________________________________________________________________________________________________________

    private void BtnProximo_Click(object sender, EventArgs e)
            {
                if (TabCtrl.SelectedIndex == 0 | TabCtrl.SelectedIndex == 2) BsCliente.MoveNext();
                if (TabCtrl.SelectedIndex == 1 | TabCtrl.SelectedIndex == 3) BsProduto.MoveNext();
                PreencherCampos();
            }

     

     

    Bom se faltar agluma coisa é só falar, espero que possa me dar uma força ai, pois sei que deve tá na minha cara a resposta, mas ainda não conheço todas

    as funções.  Desde já agradeço a atenção!!! VLW

    sexta-feira, 3 de junho de 2011 21:59
  • Neoshao,

    Pelo que vi, você está preenchendo os valores dos campos manualmente.

    O ideal seria você bindar os controles ao BindingSource, assim a .NET Framework irá "sincronizar" os controles para você com o bindingsource automaticamente. Assim o seu grid e os seus controles sempre estariam sincronizados.

    Veja este artigo:

    http://www.macoratti.net/09/04/c_dtb1.htm

    at.,

     


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    • Marcado como Resposta Neoshao domingo, 5 de junho de 2011 10:30
    sábado, 4 de junho de 2011 14:28
    Moderador
  • Valeu Ohashi!! Serviu certinho, de um jeito diferente (um novo jeito), é mais uma forma de se trabalhar, pra mim que estou aprendendo isso é muito bom, sem contar que reduziu o código consideravelmente.
    domingo, 5 de junho de 2011 10:30