none
DataGrideView Não carrega todos os Dados da tabela RRS feed

  • Pergunta

  • Pessoal, boa noite.

    Mais uma vez vou precisar da ajuda de vocês.

    Seguinte:

    Tenho uma tabela no Access com 5 campos (todos os campos estão com dados) e Fiz o SELECT para mostrar os dados no DataGrideView. Tudo funciona corretamente, ou seja, o comando vai no banco de dados e traz todas as informações (Dei um break point no Objeto "lista" e mostra todos os dados preenchidos). Porém quando descarrego as informações no Gride, dos 5 campos da minha tabela, somente 2 são mostrados no DataGrideView.

    Se alguém poder me dar uma luz eu agradeço.

    Um Abraço a todos e bom final de semana.


    sexta-feira, 19 de junho de 2015 21:22

Respostas

  • O seu DataGridView está com a propriedade AutoGenerateColumns setada com o valor True?
    sábado, 20 de junho de 2015 03:11
  • Boa tarde Agapito!

    Apenas para ajudar, verifique se setou a propriedade DataPropertyName das colunas do seu Datagridview exatamente como está nomeada as propriedades de sua classe. E também verifique se sua classe esta criada com propriedades (get;set;), pois o datagridview exibe somente propriedades e não atributos.

    Abraços e espero ter ajudado.


    Pablo Batista Cardoso



    • Marcado como Resposta AgapitoJunior segunda-feira, 22 de junho de 2015 19:50
    segunda-feira, 22 de junho de 2015 18:17

Todas as Respostas

  • O seu DataGridView está com a propriedade AutoGenerateColumns setada com o valor True?
    sábado, 20 de junho de 2015 03:11
  • posta aki o codigo que usas?


    A flower cannot blossom without sunshine, and man cannot live without love.

    sábado, 20 de junho de 2015 09:52
    Moderador
  • Código colocado no evento do click do botão:


                   

     private void btnTeste_Click(object sender, EventArgs e)
            {
                try
                {
                    IList<ordemVendaDTO> listaOrdemVenda = new List<ordemVendaDTO>();
                    listaOrdemVenda = new ordemVendaBLL().carregaOrdemTeste();
                    dataGridView1.AutoGenerateColumns = false;
                    dataGridView1.DataSource = listaOrdemVenda;

                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                }
            }

    Código colocado na camada de acesso a dadoa

                           

    public IList<ordemVendaDTO> carregaOrdemTeste()
            {
                try
                {
                    OleDbConnection con = new OleDbConnection();
                    con.ConnectionString = Properties.Settings.Default.CSI;
                    OleDbCommand cm = new OleDbCommand();
                    cm.CommandType = System.Data.CommandType.Text;
                    cm.CommandText = "SELECT * FROM ORDEMDEVENDA ";               
                    cm.Connection = con;

                    OleDbDataReader DR;
                    IList<ordemVendaDTO> listaOrdemVenda = new List<ordemVendaDTO>();

                    con.Open();
                    DR = cm.ExecuteReader();
                    if (DR.HasRows)
                    {
                        while (DR.Read())
                        {

                            ordemVendaDTO ov = new ordemVendaDTO();

                            ov.numOrdemVenda = Convert.ToString(DR["numOrdVenda"]);
                            ov.numNotaFiscal = Convert.ToString(DR["numNotaFiscal"]);
                            ov.datEmissao = Convert.ToDateTime(DR["datEmissaoNota"]);
                            ov.datVenci = Convert.ToDateTime(DR["datVenciNota"]);
                            ov.valorNota = Convert.ToString(DR["valorNota"]);
                            listaOrdemVenda.Add(ov);
                        }
                    }

                    return listaOrdemVenda;
                }
                catch (Exception ex)
                {

                    throw ex;
                }

            }

    Obs: Quando eu coloco a propriedade AutoGenerateColumns  como true, aparecem 10 campos ao invés de cinco... e da seguinte maneira 5 campos preenchidos corretamente e outros 5 campos preenchidos parcialmente. (muito doido rsrsrs)

    domingo, 21 de junho de 2015 15:36
  • Código colocado no evento do click do botão:

                   

     private void btnTeste_Click(object sender, EventArgs e)
            {
                try
                {
                    IList<ordemVendaDTO> listaOrdemVenda = new List<ordemVendaDTO>();
                    listaOrdemVenda = new ordemVendaBLL().carregaOrdemTeste();
                    dataGridView1.AutoGenerateColumns = false;
                    dataGridView1.DataSource = listaOrdemVenda;

                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                }
            }

    Código colocado na camada de acesso a dadoa

                           

    public IList<ordemVendaDTO> carregaOrdemTeste()
            {
                try
                {
                    OleDbConnection con = new OleDbConnection();
                    con.ConnectionString = Properties.Settings.Default.CSI;
                    OleDbCommand cm = new OleDbCommand();
                    cm.CommandType = System.Data.CommandType.Text;
                    cm.CommandText = "SELECT * FROM ORDEMDEVENDA ";               
                    cm.Connection = con;

                    OleDbDataReader DR;
                    IList<ordemVendaDTO> listaOrdemVenda = new List<ordemVendaDTO>();

                    con.Open();
                    DR = cm.ExecuteReader();
                    if (DR.HasRows)
                    {
                        while (DR.Read())
                        {

                            ordemVendaDTO ov = new ordemVendaDTO();

                            ov.numOrdemVenda = Convert.ToString(DR["numOrdVenda"]);
                            ov.numNotaFiscal = Convert.ToString(DR["numNotaFiscal"]);
                            ov.datEmissao = Convert.ToDateTime(DR["datEmissaoNota"]);
                            ov.datVenci = Convert.ToDateTime(DR["datVenciNota"]);
                            ov.valorNota = Convert.ToString(DR["valorNota"]);
                            listaOrdemVenda.Add(ov);
                        }
                    }

                    return listaOrdemVenda;
                }
                catch (Exception ex)
                {

                    throw ex;
                }

            }

    Obs: Quando eu coloco a propriedade AutoGenerateColumns  como true, aparecem 10 campos ao invés de cinco... e da seguinte maneira 5 campos preenchidos corretamente e outros 5 campos preenchidos parcialmente. (muito doido rsrsrs)

    domingo, 21 de junho de 2015 15:36
  • Você em algum momento cria as colunas e adiciona elas no teu DataGrid via código?
    domingo, 21 de junho de 2015 17:03
  • Aconselho vc a fechar a sua conexao apos retornado os dados banco!


                    return listaOrdemVenda;

                    //con.Close();

                }
                catch (Exception ex)
                {

                    throw ex;
                }

            }


    domingo, 21 de junho de 2015 17:21
  • Aparece 10 campos porque ela carrega os campos da tabela no teu datagridview. Como tu adicionaiste as colunas manualmente, o codigo que voce usa esta errado.

    Voce tem de alimentar o datagridview nao via datasource mais sim pelas colunas que tens.

    aki vai um evemplo:

     private void Carregar()
            {
                SqlConnection connection = new SqlConnection(conecao_string());

                SqlCommand comando = new SqlCommand();
                comando.CommandText = "Select * from Table_Report";
                comando.CommandType = CommandType.Text;
                comando.Connection = connection;

                connection.Open();
                dt = new DataTable();
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = comando;
                adapter.Fill(dt);
                for (int j = 0; j < dt.Columns.Count; j++)
                    
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        this.dataGridView1.Rows.Add();
                        this.dataGridView1.Rows[i].Cells[j].Value = dt.Rows[i][j].ToString();        
                    }          
               
           

    }

    outra pergunta: porque voce usa IList? voce nao esta a trabalhar com interface. So se usa IList que que trabalha com interface. Por isso troca para List<>


    A flower cannot blossom without sunshine, and man cannot live without love.

    segunda-feira, 22 de junho de 2015 14:32
    Moderador
  • Beleza.

    Vou testar aqui e dou retorno.

    Obrigado

    segunda-feira, 22 de junho de 2015 17:16
  • Boa tarde Agapito!

    Apenas para ajudar, verifique se setou a propriedade DataPropertyName das colunas do seu Datagridview exatamente como está nomeada as propriedades de sua classe. E também verifique se sua classe esta criada com propriedades (get;set;), pois o datagridview exibe somente propriedades e não atributos.

    Abraços e espero ter ajudado.


    Pablo Batista Cardoso



    • Marcado como Resposta AgapitoJunior segunda-feira, 22 de junho de 2015 19:50
    segunda-feira, 22 de junho de 2015 18:17
  • Pablo, você matou a charada.

    Eu digitei o DataPropertyName do Gride diferente da Classe.

    Valeu mesmo!!!

    E muito Obrigado aos outros membros do Fórum também. Graças às dicas do Bruno, do Levi e do Gustavo, vi outras coisas no meu código que estavam erradas e consertei!

    Obrigado e um abraço

    segunda-feira, 22 de junho de 2015 19:49