none
Ajuda com preenchimento datagridview atraves de consulta sql RRS feed

  • Pergunta

  • Pessoal, estou efetuando uma consulta através do código abaixo, que funciona normalmente...

    O problema que estou tendo é que não estou sabendo me relacionar com o datagridview e como adcionar os dados nele através desta consulta.

    Eu criei o datagridview com umas colunas já definidas independente da consulta, só queria incluir os valores da consulta em cada coluna e linha...porém o que está acontecendo é que ele cria as linhas certinhas...mas não coloca os dados na linha certa.

    Nesta consulta que fiz..o select retorna 3 registros no banco...ele cria as 3 linhas normalmente...mas o que aparece apenas é o ultimo registro na primeira linha do grid...deixando as outras duas em branco.

    Vejam a imagem para entender melhor. 

    Alguém poderia me orientar?

     try
                {
                    SqlConnection Conexao = new SqlConnection(Properties.Settings.Default.GestaoFrotaConnectionString);
                    SqlCommand Comando = new SqlCommand();
                    Comando.Connection = Conexao;
    
                    Comando.CommandText = "SELECT * FROM MONTAGEM WHERE PLACA=@PLACA AND DESMONTOU=@DESMONTOU";
    
                    Comando.Parameters.AddWithValue("@PLACA", txtPlaca.Text);
                    Comando.Parameters.AddWithValue("@DESMONTOU", "NAO");
    
                    Conexao.Open();
    
                    SqlDataReader achou = Comando.ExecuteReader();
                   
                    //percorre o DataRead
                    while (achou.Read())
                    {
                        
                            dataGridView1.Rows.Add();
                            dataGridView1.CurrentRow.Cells[1].Value = achou["ITEM"].ToString();
                            dataGridView1.CurrentRow.Cells[2].Value = achou["SERIE"].ToString();
                            dataGridView1.CurrentRow.Cells[3].Value = achou["PLACA"].ToString();
                            dataGridView1.CurrentRow.Cells[4].Value = achou["MEDIDA"].ToString();
                            dataGridView1.CurrentRow.Cells[5].Value = achou["DOT"].ToString();
                            dataGridView1.CurrentRow.Cells[6].Value = achou["ALTMM"].ToString();
                            dataGridView1.CurrentRow.Cells[7].Value = achou["EIXO"].ToString();
                            dataGridView1.CurrentRow.Cells[8].Value = achou["LADO"].ToString();
                            dataGridView1.CurrentRow.Cells[9].Value = achou["CLASSE"].ToString();
                            dataGridView1.CurrentRow.Cells[11].Value = txtNrDesmontagem.Text;
                            dataGridView1.CurrentRow.Cells[12].Value = achou["TIPO"].ToString();
                            dataGridView1.CurrentRow.Cells[13].Value = achou["OBS"].ToString();
                           
                        }
    
                    Conexao.Close();
                    
          
                }
                catch (SqlException)
                {
                    MessageBox.Show("Houve um erro ao tratar a Conexão com o banco de dados.", "Retorno de consulta", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

    segunda-feira, 29 de junho de 2015 23:17

Respostas

  • Pior que os nomes estão iguais...

    Eu consegui resolver meu problema com o código abaixo:

     SqlDataReader achou = Comando.ExecuteReader();
                  
                    while (achou.Read())
                    {
                        
                            dataGridView1.Rows.Add();
                            dataGridView1.CurrentRow.Cells[1].Value = achou["ITEM"].ToString();
                            dataGridView1.CurrentRow.Cells[2].Value = achou["SERIE"].ToString();
                            dataGridView1.CurrentRow.Cells[3].Value = achou["PLACA"].ToString();
                            dataGridView1.CurrentRow.Cells[4].Value = achou["MEDIDA"].ToString();
                            dataGridView1.CurrentRow.Cells[5].Value = achou["DOT"].ToString();
                            dataGridView1.CurrentRow.Cells[7].Value = achou["EIXO"].ToString();
                            dataGridView1.CurrentRow.Cells[8].Value = achou["LADO"].ToString();
                            dataGridView1.CurrentRow.Cells[9].Value = achou["CLASSE"].ToString();
                            dataGridView1.CurrentRow.Cells[11].Value = txtNrDesmontagem.Text;
                            dataGridView1.CurrentRow.Cells[12].Value = achou["TIPO"].ToString();
                            dataGridView1.CurrentRow.Cells[13].Value = achou["OBS"].ToString();
                            int index = this.dataGridView1.CurrentRow.Index + 1;
                            index = index % this.dataGridView1.Rows.Count;
                            this.dataGridView1.CurrentCell = this.dataGridView1.Rows[index].Cells[this.dataGridView1.CurrentCell.ColumnIndex];
                           
                   }

    A unica coisa que estava faltando era uma linha inicial criada vazia ao abrir o form...que eu tinha removido para as linhas serem criadas via código..

    Sem a primeira linha criada, o while criava a primeira linha e jogava o segundo registro na primeira linha...o terceiro registro na segunda linha...e a terceira ficava vazia.

    Quando criei a primeira linha vazia ao abrir o form...o while achou a primeira linha e se encarregou de dar os valores corretos.

    quarta-feira, 1 de julho de 2015 00:36

Todas as Respostas

  • Olá Renato, ele está adicionado o registro somente na primeira linha pois você está usando o CurrentRow, não cheguei a testar, mas o código abaixo a principio resolve teu problema.

     while (achou.Read())
                {
    
                    var dataRowView = new DataGridViewRow();
                    dataRowView.Cells[1].Value = achou["ITEM"].ToString();
                    dataRowView.Cells[2].Value = achou["SERIE"].ToString();
                    dataRowView.Cells[3].Value = achou["PLACA"].ToString();
                    dataRowView.Cells[4].Value = achou["MEDIDA"].ToString();
                    dataRowView.Cells[5].Value = achou["DOT"].ToString();
                    dataRowView.Cells[6].Value = achou["ALTMM"].ToString();
                    dataRowView.Cells[7].Value = achou["EIXO"].ToString();
                    dataRowView.Cells[8].Value = achou["LADO"].ToString();
                    dataRowView.Cells[9].Value = achou["CLASSE"].ToString();
                    dataRowView.Cells[11].Value = txtNrDesmontagem.Text;
                    dataRowView.Cells[12].Value = achou["TIPO"].ToString();
                    dataRowView.Cells[13].Value = achou["OBS"].ToString();
                    dataGridView1.Rows.Add(dataRowView);
                }

    segunda-feira, 29 de junho de 2015 23:31
  • Tente dessa forma acrescentando apenas um DataTable com os dados do SELECT

    try
                {
                    SqlConnection Conexao = new SqlConnection(Properties.Settings.Default.GestaoFrotaConnectionString);
                    SqlCommand Comando = new SqlCommand();
                    Comando.Connection = Conexao;
    
                    Comando.CommandText = "SELECT * FROM MONTAGEM WHERE PLACA=@PLACA AND DESMONTOU=@DESMONTOU";
    
                    Comando.Parameters.AddWithValue("@PLACA", txtPlaca.Text);
                    Comando.Parameters.AddWithValue("@DESMONTOU", "NAO");
    
                    Conexao.Open();
    
                    SqlDataReader achou = Comando.ExecuteReader();
                   
                   DataTable dt = new DataTable();
                   dt.Load(achou);
                 if(dt.Rows.Count>0)
                   {
                   //Carrega os dados na DataGridView
                    DataGridView.DataSource = dt.DefaultView;                
                   }
                    Conexao.Close();
                    
          
                }
                catch (SqlException)
                {
                    MessageBox.Show("Houve um erro ao tratar a Conexão com o banco de dados.", "Retorno de consulta", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }



    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel



    segunda-feira, 29 de junho de 2015 23:36
  • Bruno, tentei com seu código...mas está dando erro na linha abaixo...

    dizendo que o valor é nulo.

    dataRowView.Cells[1].Value = achou["ITEM"].ToString();

    terça-feira, 30 de junho de 2015 00:11
  • Amigão, seu código criou três linhas em branco.


    terça-feira, 30 de junho de 2015 00:12
  • Bruno, tentei com seu código...mas está dando erro na linha abaixo...

    dizendo que o valor é nulo.

    dataRowView.Cells[1].Value = achou["ITEM"].ToString();

    Renato, tenta então o seguinte código.

    int controladorLinha = 0;
    
                while (achou.Read())
                {
                    dataGridView1.Rows.Add();
                    dataGridView1.Rows[controladorLinha].Cells[1].Value = achou["ITEM"].ToString();
                    dataGridView1.Rows[controladorLinha].Cells[2].Value = achou["SERIE"].ToString();
                    dataGridView1.Rows[controladorLinha].Cells[3].Value = achou["PLACA"].ToString();
                    dataGridView1.Rows[controladorLinha].Cells[4].Value = achou["MEDIDA"].ToString();
                    dataGridView1.Rows[controladorLinha].Cells[5].Value = achou["DOT"].ToString();
                    dataGridView1.Rows[controladorLinha].Cells[6].Value = achou["ALTMM"].ToString();
                    dataGridView1.Rows[controladorLinha].Cells[7].Value = achou["EIXO"].ToString();
                    dataGridView1.Rows[controladorLinha].Cells[8].Value = achou["LADO"].ToString();
                    dataGridView1.Rows[controladorLinha].Cells[9].Value = achou["CLASSE"].ToString();
                    dataGridView1.Rows[controladorLinha].Cells[11].Value = txtNrDesmontagem.Text;
                    dataGridView1.Rows[controladorLinha].Cells[12].Value = achou["TIPO"].ToString();
                    dataGridView1.Rows[controladorLinha].Cells[13].Value = achou["OBS"].ToString();
    
                    controladorLinha++;
                }

    terça-feira, 30 de junho de 2015 00:27
  • O código que postei ja vai fazer o que precisa mantendo os nomes dos campos e preenchendo os valores

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    terça-feira, 30 de junho de 2015 00:29
  • Mr.GMSOFT, veja a imagem.

    está criando as linhas em branco.

    terça-feira, 30 de junho de 2015 10:14
  • Sim..As colunas foram personalizadas manualmente.
    terça-feira, 30 de junho de 2015 10:16
  • Bruno, mesma coisa da primeira postagem...

    é criado três linhas, a primeira com os dados do ultimo registro e as outras duas em branco.

    terça-feira, 30 de junho de 2015 10:17
  • Eua cho q é isso:

    Como as colunas do seu grid foram editadas manualmente, vc precisa colocar no "DataPropertyName" de cada coluna do grid o nome equivalente a "coluna" da sua tabela/query.


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    terça-feira, 30 de junho de 2015 21:41
  • Pior que os nomes estão iguais...

    Eu consegui resolver meu problema com o código abaixo:

     SqlDataReader achou = Comando.ExecuteReader();
                  
                    while (achou.Read())
                    {
                        
                            dataGridView1.Rows.Add();
                            dataGridView1.CurrentRow.Cells[1].Value = achou["ITEM"].ToString();
                            dataGridView1.CurrentRow.Cells[2].Value = achou["SERIE"].ToString();
                            dataGridView1.CurrentRow.Cells[3].Value = achou["PLACA"].ToString();
                            dataGridView1.CurrentRow.Cells[4].Value = achou["MEDIDA"].ToString();
                            dataGridView1.CurrentRow.Cells[5].Value = achou["DOT"].ToString();
                            dataGridView1.CurrentRow.Cells[7].Value = achou["EIXO"].ToString();
                            dataGridView1.CurrentRow.Cells[8].Value = achou["LADO"].ToString();
                            dataGridView1.CurrentRow.Cells[9].Value = achou["CLASSE"].ToString();
                            dataGridView1.CurrentRow.Cells[11].Value = txtNrDesmontagem.Text;
                            dataGridView1.CurrentRow.Cells[12].Value = achou["TIPO"].ToString();
                            dataGridView1.CurrentRow.Cells[13].Value = achou["OBS"].ToString();
                            int index = this.dataGridView1.CurrentRow.Index + 1;
                            index = index % this.dataGridView1.Rows.Count;
                            this.dataGridView1.CurrentCell = this.dataGridView1.Rows[index].Cells[this.dataGridView1.CurrentCell.ColumnIndex];
                           
                   }

    A unica coisa que estava faltando era uma linha inicial criada vazia ao abrir o form...que eu tinha removido para as linhas serem criadas via código..

    Sem a primeira linha criada, o while criava a primeira linha e jogava o segundo registro na primeira linha...o terceiro registro na segunda linha...e a terceira ficava vazia.

    Quando criei a primeira linha vazia ao abrir o form...o while achou a primeira linha e se encarregou de dar os valores corretos.

    quarta-feira, 1 de julho de 2015 00:36
  • As linhas em branco estão sendo criadas por que você deve ter criado as colunas na DataGridView em tempo de projeto, basta remover que funciona

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 1 de julho de 2015 11:40
  • Valeu meu caro, testei aqui a parte e realmente funcionou.

    Mas tive que fazer do outro modo pois eu precisava das colunas personalizadas, pois existem algumas configurações especificas.

    Mas muito obrigado e um grande abraço!

    quarta-feira, 1 de julho de 2015 13:22