Usuário com melhor resposta
Exibir resultado de consulta sem Datagrid

Pergunta
-
Olá, gostaria de saber se existe alguma maneira de exibir as linhas de uma consulta SQL sem ter que utilizar o dataGrid
O problema é que não gosto da visualização do dataGrid, no momento eu faço assim:
Crio varios elementos na tela:
E quando realizo uma consulta, eu conto quantos valores existem e executo um comando For e dentro dele é assim:
For i = 0 To 7 If i = 0 Then ' Ai aki muda os valores da primeira linha Else if i = 1 Then ' Ai aki muda os valores da segunda linha ... E por ai vai... End if Next i
Então, eu gostaria de saber se existe alguma alternativa a isso, pois me obriga a realizar mais uma consulta a cada passagem do For pra pegar dados pra preencher a linha...
Desde já obrigado!
Respostas
-
Luan,
Nesse seu caso você poderia fazer algo mais dinâmico... Por exemplo, se você tiver os seus labels nomeados de alguma forma que você diferencie um do outro somente com um número (label1, label2, label3, etc.), é só utilizar um contador e o método Find da coleção de Controls do seu Form para encontrar o label correspondente a "passada" de um while...
Veja o exemplo abaixo (note que no código que estou passando eu inclui até a parte de abrir a conexão, criar o comando e tudo mais... para o seu caso, a parte interessante para resolver o seu problema seria depois do ExecuteReader)... Dê uma olhada se você consegue entender a ideia para aplicar no seu cenário:
Note também que utilizei C# no exemplo, mas, você pode facilmente converter para VB.NET utilizando algum conversor gratuito, como este:
http://www.developerfusion.com/tools/convert/csharp-to-vb/
using (SqlConnection connection = new SqlConnection(@"SUA_STRING_DE_CONEXAO")) { try { connection.Open(); if (connection.State.Equals(ConnectionState.Open)) { using (SqlCommand comm = connection.CreateCommand()) { comm.CommandText = "SELECT NOMEDOCAMPO FROM NOMEDATABELA"; try { // A parte que interessa para resolver o seu problema começa aqui: int contador = 1; SqlDataReader dataReader = comm.ExecuteReader(); while (dataReader.Read()) { Control[] controlesEncontrados = this.Controls.Find(string.Format("label{0}", contador++), true); // Se existe algum label disponível para ser preenchido com o índice atual. if (controlesEncontrados.Any()) { Label labelCorrespondente = (controlesEncontrados[0] as Label); if (labelCorrespondente != null) labelCorrespondente.Text = dataReader["NOMEDOCAMPO"].ToString(); } } } catch (Exception ex) { MessageBox.Show(string.Format("Erro ao retornar informações do banco de dados.\n{0}", ex.Message), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } catch (SqlException ex) { MessageBox.Show(string.Format("Não foi possível abrir a conexão com o banco de dados.\n{0}", ex.Message), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Editado AndreAlvesLimaModerator terça-feira, 4 de janeiro de 2011 11:04 complemento
- Sugerido como Resposta AndreAlvesLimaModerator quinta-feira, 6 de janeiro de 2011 12:04
- Marcado como Resposta AndreAlvesLimaModerator quinta-feira, 13 de janeiro de 2011 18:11
Todas as Respostas
-
Luan,
Não entendi... Você não gosta da visualização da DataGridView, então, está exibindo os dados em qual tipo de controle?
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -
-
Luan,
Nesse seu caso você poderia fazer algo mais dinâmico... Por exemplo, se você tiver os seus labels nomeados de alguma forma que você diferencie um do outro somente com um número (label1, label2, label3, etc.), é só utilizar um contador e o método Find da coleção de Controls do seu Form para encontrar o label correspondente a "passada" de um while...
Veja o exemplo abaixo (note que no código que estou passando eu inclui até a parte de abrir a conexão, criar o comando e tudo mais... para o seu caso, a parte interessante para resolver o seu problema seria depois do ExecuteReader)... Dê uma olhada se você consegue entender a ideia para aplicar no seu cenário:
Note também que utilizei C# no exemplo, mas, você pode facilmente converter para VB.NET utilizando algum conversor gratuito, como este:
http://www.developerfusion.com/tools/convert/csharp-to-vb/
using (SqlConnection connection = new SqlConnection(@"SUA_STRING_DE_CONEXAO")) { try { connection.Open(); if (connection.State.Equals(ConnectionState.Open)) { using (SqlCommand comm = connection.CreateCommand()) { comm.CommandText = "SELECT NOMEDOCAMPO FROM NOMEDATABELA"; try { // A parte que interessa para resolver o seu problema começa aqui: int contador = 1; SqlDataReader dataReader = comm.ExecuteReader(); while (dataReader.Read()) { Control[] controlesEncontrados = this.Controls.Find(string.Format("label{0}", contador++), true); // Se existe algum label disponível para ser preenchido com o índice atual. if (controlesEncontrados.Any()) { Label labelCorrespondente = (controlesEncontrados[0] as Label); if (labelCorrespondente != null) labelCorrespondente.Text = dataReader["NOMEDOCAMPO"].ToString(); } } } catch (Exception ex) { MessageBox.Show(string.Format("Erro ao retornar informações do banco de dados.\n{0}", ex.Message), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } catch (SqlException ex) { MessageBox.Show(string.Format("Não foi possível abrir a conexão com o banco de dados.\n{0}", ex.Message), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Editado AndreAlvesLimaModerator terça-feira, 4 de janeiro de 2011 11:04 complemento
- Sugerido como Resposta AndreAlvesLimaModerator quinta-feira, 6 de janeiro de 2011 12:04
- Marcado como Resposta AndreAlvesLimaModerator quinta-feira, 13 de janeiro de 2011 18:11
-