Usuário com melhor resposta
Ajuda com preenchimento datagridview atraves de consulta sql

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); }
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.
- Marcado como Resposta Renato Cristiano quarta-feira, 1 de julho de 2015 00:37
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); }
-
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); }
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Editado Mr. GMSOFT segunda-feira, 29 de junho de 2015 23:38
- Sugerido como Resposta Lucio Rogerio SPBanned terça-feira, 30 de junho de 2015 01:51
-
-
-
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++; }
-
-
-
-
-
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
-
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.
- Marcado como Resposta Renato Cristiano quarta-feira, 1 de julho de 2015 00:37
-
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
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Sugerido como Resposta Lucio Rogerio SPBanned quarta-feira, 1 de julho de 2015 17:10
-