none
DataGridView - Não retorna a primeira linha de uma consulta RRS feed

  • Pergunta

  • Boa noite Pessoal,

    Estou com um problema, talvez simples pra vcs mas que está me tirando a paciência.

    É o seguinte, estou construindo um WindowsForm, onde coloquei um textbox, um combobox e um datagridview;

    O mesmo está se conectando com um banco ACCESS10, via connectionstring.

    Problema:  O DataGridView não exibe o primeiro registro no resultado da consulta, porém já constatei que ele está lá!

    Fiz um teste de filtrar o resultado para exibir apenas um registro, mas daí o Grid fica vazio, mas a consulta retorna um registro conforme esperado.

    Trecho de código constando a consulta que está sendo executada:

    private void button1_Click(object sender, EventArgs e)
            
                OleDbConnection conexaoDB = new OleDbConnection();
                conexaoDB.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = '|DataDirectory|\GxxxxSS_DBM7.accdb'; Persist Security Info=True";

    conexaoDB.Open();
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText = "SELECT tipousuario.idTipoUsuario, tipousuario.nomeTipoUsuario, " +
                        "status.nomestatus, tipousuario.dataregistro FROM status INNER JOIN  " +
                        "tipousuario ON status.idstatus = tipousuario.idstatus " + 
                        "WHERE(((tipousuario.nomeTipoUsuario) Like '%" + txNomeTipoUsuario.Text + "%' ));";
                cmd.CommandType = CommandType.Text;
                cmd.Connection = conexaoDB;
                OleDbDataReader OleDataR_TipoUsuario;
                OleDataR_TipoUsuario = cmd.ExecuteReader();

          OleDataR_TipoUsuario.Read();

    ///Preenchendo o textbox(txNomeTipoUsuario) com a primeira linha do resultado da consulta:

    txNomeTipoUsuario.Text = OleDataR_TipoUsuario.GetString(1);    ///Ok esse funcionou!

    //Agora populando o DataGridView (dgvTipoUsuario):

    DataTable dtTipoUsuario = new DataTable();
                    dtTipoUsuario.Load(OleDataR_TipoUsuario);

    dgvTipoUsuario.DataSource = dtTipoUsuario;
                    dgvTipoUsuario.Refresh();  /// Neste ponto já não funcionou, de três registros ele só apresentou os dois últimos!.

    conexaoDB.Close();

    //Agora populando o Combobox(cbStatus) em:

    private void cbStatus_SelectedIndexChanged(object sender, EventArgs e)

                   

                                              

    conexaoDB.Open();
                    OleDbCommand cmd = new OleDbCommand();
                    cmd.CommandText = "SELECT status.idstatus, status.nomestatus FROM status;";
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = conexaoDB;
                    OleDbDataReader OleDataR_Status;
                    OleDataR_Status = cmd.ExecuteReader();
                    OleDataR_Status.Read();

                    DataTable dtStatus = new DataTable();

                    dtStatus.Load(OleDataR_Status);
                  
                    DataView dtvStatus = new DataView(dtStatus, "", "nomestatus", DataViewRowState.OriginalRows);
                    cbStatus.DataSource = dtvStatus;  

    ///Também não funcionou, de três registros ele só apresentou os dois últimos!.

                    cbStatus.DisplayMember = "nomestatus";
                    cbStatus.ValueMember = "idstatus";

    conexaoDB.Close();

    Será que existe alguma propriedade do Grid que não está permitindo exibir a primeira linha dos resultados??

    Obs.: Mesmo ocultando o cabeçalho do Grid, o problema continua!

    Desde já agradeço!!


    domingo, 25 de março de 2018 21:10

Respostas

  • Olá meu caro... não faça Read no seu OleDataR_Status. Pois o DataReader só tem uma direção. Sempre em frente. Ao realizar um Read vc queimou o primeiro registro.

    Quando vc usa o Load ele pega o próximo registro. Então de o Load direto.

    DtStatus.Load(......)


    Att, Lucio Rogerio


    Espero ter ajudado, se ajudei, por favor Vote como Útil, e se resolvi seu problema, clique em Marcar como Resposta.

    terça-feira, 27 de março de 2018 01:01