Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

iF ~

Mostrar dados em uma GridView C#

Recommended Posts

Olá galerinha. Sempre que a coisa aperta lá viemos nós buscando solução....

 

Pois bem, desta vez é o seguinte:

 

Quero realizar uma consulta em um banco e mostrar somente os dados filtrados.

Na minha página principal tenho uma TextBox com a ID "txtNome". Nesta txtNome eu escrevo o nome da pessoa que quero procurar no banco. Então clico no botão "btnConsultar".

 

Eis meu código:

 

protected void btnConsulta_Click(object sender, EventArgs e)
	{
		string strStringConn = @"Data Source=.\SQLEXPRESS;Initial Catalog=DevelopmentDB;Integrated Security=True";
		string strStringComando = "SELECT Nome,Sobrenome,Usuario,Grupo FROM CadastroUsuarios WHERE Nome=@nome";

		SqlConnection objSqlConn = new SqlConnection(strStringConn);
		SqlCommand objSqlComando = new SqlCommand(strStringComando, objSqlConn);
		SqlDataReader leitura = null;

		objSqlComando.Parameters.Add("@nome", SqlDbType.NVarChar);
		objSqlComando.Parameters["@nome"].Value = txtNome.Text.ToLower();

		try
		{
			objSqlConn.Open();
			if (objSqlConn.State == ConnectionState.Open)
			{
				leitura = objSqlComando.ExecuteReader();
				while (leitura.Read())
				{
					gridLeitura.DataSource = leitura;
					//gridLeitura.DataBind();
				}
				gridLeitura.DataBind();
				leitura.Close();
				objSqlConn.Close();
			}
		}
		catch (Exception ex)
		{
			lblExcecao.Text = ex.ToString();
			objSqlConn.Close();
		}
	}

Desta forma nada é exibido. Se eu faço assim:

 

protected void btnConsulta_Click(object sender, EventArgs e)
	{
		string strStringConn = @"Data Source=.\SQLEXPRESS;Initial Catalog=DevelopmentDB;Integrated Security=True";
		string strStringComando = "SELECT Nome,Sobrenome,Usuario,Grupo FROM CadastroUsuarios WHERE Nome=@nome";

		SqlConnection objSqlConn = new SqlConnection(strStringConn);
		SqlCommand objSqlComando = new SqlCommand(strStringComando, objSqlConn);
		SqlDataReader leitura = null;

		objSqlComando.Parameters.Add("@nome", SqlDbType.NVarChar);
		objSqlComando.Parameters["@nome"].Value = txtNome.Text.ToLower();

		try
		{
			objSqlConn.Open();
			if (objSqlConn.State == ConnectionState.Open)
			{
				leitura = objSqlComando.ExecuteReader();
				while (leitura.Read())
				{
					gridLeitura.DataSource = leitura;
					gridLeitura.DataBind();
				}
				//gridLeitura.DataBind();
				leitura.Close();
				objSqlConn.Close();
			}
		}
		catch (Exception ex)
		{
			lblExcecao.Text = ex.ToString();
			objSqlConn.Close();
		}
	}

Só a primeira linha da minha tabela do meu banco é exibida qundo eu faço a consulta correta.

 

Não sei como fazer para quando eu, por exemplo, consultar pelo nome "João", apareçam todos os "joães" do banco.

 

Toda ajuda é bem vinda http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para você escrever João e trazer todos os registros como "jões" acredito que seja muito complexo e muito pouco usado, li pouca coisa sobre isso o que é normal, é você escrever Jo e trazer todos os registros que comece com o Jo.

Para isto basta usar o Like. Seu select ficará assim:

SELECT Nome,Sobrenome,Usuario,Grupo FROM CadastroUsuarios WHERE Nome LIKE 'Jo%'

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mmm obrigado quintelab, a explicação foi muito útil. Mas meu real problema é que eu qro fazer uma busca por nome. Um nome qlquer. Pode ser "joao", "jose", "maria", "etc". Esse nome pode aparecer mais de uma vez na tabela e eu qro todos estes registros e seus dados relacionados. Isso não está acontecendo. No código q eu postei acima qndo eu coloco o "gridLeitura.DataBind();" dentro do bloco "while", somente o primeiro registro da minha tabela é exibido, não importa qual foi minha busca. Exemplo do que esta acontecendo: Na primeira linha da coluna "Nome" da minha tabela eu tenho o resgistro "maria". Se eu digito na TextBox e procuro por "joao" não é exibido nada (sim, eu tenho o registro "joao" na tabela). Mas se eu digito "maria" e realizo a consulta as colunas q eu seleciono aparecem. Mas somente o primeiro registro "maria" eh mostrado. E o que eu qro é que sejam mostradas todas as informações de TODOS os registros que tenham na coluna "Nome" o nome "maria".

 

Bom...Não sei se fui bem claro, acho q nao huaahua. Se puderem ajudar ficarei muito grato. http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi em partes, mas bem. Primeira coisa, não existe a necessidade de um while para montar uma grid.

Para montar uma GridView basta:

SqlConnection con = new SqlConnection(@"Data Source=QUINTELAB\SQLEXPRESS;Initial Catalog=Teste;User ID=sa; Pwd=senha;");
con.Open();

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM MERCADORIAS", con);
DataSet ds = new DataSet();

da.Fill(ds, "MERCADORIAS");
da.Dispose();
con.Close();

Repare que só precisei de um SqlDataAdapter e um DataSet, e a quantidade de resgistros que o meu select retorna vai ser o que vai aparecer na grid.

Acredito que seu problema esteja naquele while e não é necessário.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser o while mesmo. Mas ele é necessário para ler linha por linha da tabela, já que não estou utilizando um DataAdapter. E nem posso utilizar um. Tenho que fazer em um "Ambiente Conectado", ou seja, tenho que utilizar o DataReader.

 

Obrigado de novo quintelab http://forum.imasters.com.br/public/style_emoticons/default/grin.gif . Se tiver alguma noção de como fazer em um ambiente conectado ficarei muito grato.

E se mais alguém souber qualquer coisa que possa me auxiliar será de grande ajuda.

 

Edição ---------------------------

 

Nada melhor que muita perseverança, cabeça dura, teimosia e uma caneca de um bom café!

 

Funcionou da seguinte forma:

 

protected void btnConsulta_Click(object sender, EventArgs e)
	{
		string strStringConn = @"Data Source=.\SQLEXPRESS;Initial Catalog=DevelopmentDB;Integrated Security=True";
		string strStringComando = "SELECT Nome,Sobrenome,Usuario,Grupo FROM CadastroUsuarios WHERE Nome=@nome";
		string strNome = txtNome.Text.ToLower();

		SqlConnection objSqlConn = new SqlConnection(strStringConn);
		SqlCommand objSqlComando = new SqlCommand(strStringComando, objSqlConn);
		SqlDataReader leitura = null;
		
		objSqlComando.Parameters.Add("@nome", SqlDbType.NVarChar);
		objSqlComando.Parameters["@nome"].Value = strNome;

		try
		{
			objSqlConn.Open();
			if (objSqlConn.State == ConnectionState.Open)
			{
				leitura = objSqlComando.ExecuteReader();
				if (leitura.HasRows)
				{
					gridLeitura.DataSource = leitura;
				}
				else
				{
					lblTeste.Text = "Erro Fatal!!"; // hauhauahuahu
				}
				gridLeitura.DataBind();
				leitura.Close();
			}
			objSqlConn.Close();
		}
		catch (Exception ex)
		{
			lblExcecao.Text = ex.ToString();
			objSqlConn.Close();
		}
	}

Vlw pela ajuda quintelab. Qlquer coisa estamos aí! \o

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.