Jump to content

Archived

This topic is now archived and is closed to further replies.

andersonas

Pesquisar no DataGridView através de Textbox

Recommended Posts

Pessoal, Bom dia!

 

Estou precisando de umas dicas para resolver o seguinte problema:

tenho uma tela com um DataGridView mostrando alguns registros e gostaria de filtrar os registros na medida que for digitando algo no textbox, como por exemplo: an (mostrar somente os registros iniciados em an) e no caso de limpar o textbox voltar a aparecer todos.

 

Desde já agradeço pela atenção de todos.

 

Anderson

Share this post


Link to post
Share on other sites

Quintelab esse tipo de programação também não me agrada, mas meu cliente impos essa condição. Infelizmente tive que atende-lo dessa forma, mesmo mostrando alternativas.

 

Mesmo assim agradeço e muito pela dica.

Então terei que montar um metodo e passando por parametros a string digitada, certo?

 

Atenciosamente

 

Eu acho pouco viável ir atualizando uma grid. Utilize o evento KeyPress do TextBox a cada letra digitada ele dispara o evento.

 

Abraços...

Share this post


Link to post
Share on other sites

Olá,

 

Posso não ter entendido muito bem, mas veja se isto ajuda:

 

Public Class Form1

	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

		' Cria um DataTable com alguns registos
		Dim dt As New DataTable
		dt.Columns.Add("ID", GetType(Byte)).AutoIncrement = True
		dt.Columns.Add("Description", GetType(String))

		Dim dr As DataRow
		For x As Byte = 0 To 99
			dr = dt.NewRow
			dr("Description") = "Item " & x.ToString.PadLeft(3, "0"c)
			dt.Rows.Add(dr)
		Next

		' Define a tabela como datasource da datagridview
		Me.DataGridView1.DataSource = dt.DefaultView

	End Sub

	' Filtra os resultados com base no campo "Description"
	Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
		Dim dv As DataView = Me.DataGridView1.DataSource
		dv.RowFilter = " Description LIKE '%" & Me.TextBox1.Text & "%'"
		Me.DataGridView1.DataSource = dv
	End Sub

End Class

Share this post


Link to post
Share on other sites

em c# eu faço mais ou menos assim e funciona

 

private void textBox1_TextChanged(object sender, EventArgs e)
		{
			SqlConnection conn = new SqlConnection("Password=mbm;Persist Security Info=True;User ID=sa;Initial Catalog=modelo_redex;Data Source=192.168.0.2\\SQLEXPRESS");	  
			SqlCommand	cmd  = new SqlCommand   ("select * from entidade", conn);

 

		conn.Open();

 

	  DataTable dt = new DataTable();

	  SqlDataAdapter da = new SqlDataAdapter(cmd);

 

	  da.Fill(dt);

	  DataView dv = new DataView(dt);

 

	  dv.RowFilter = "nm_entidade like'" + textBox1.Text + "%'";

	  dataGridView1.DataSource = dv;

	  conn.Close();

Share this post


Link to post
Share on other sites

Usei essa mesma ideia em um sistema. Utilizei o sequinte código no evendo do txt e roda perfeitamente.

string strSelect = "SELECT * FROM NomeDaTabela WHERE NomeDaColuna LIKE (@NomeDaColuna)";

using (SqlConnection conn = new SqlConnection(SuaStringDeConexão))
{
   SqlDataAdapter da = new SqlDataAdapter(strSelect, conn);
   //Passagem por parâmetros.
   da.SelectCommand.Parameters.AddWithValue("@NomeDaColuna", SeuTextBoxDeBusca.Text + "%");
   DataSet ds = new DataSet();
   da.Fill(ds, "NomeDaTabela");
   SeuDataGridView.DataSource = ds.Tables["NomeDaTabela"];
}

Se funcionar com você da retorno, por favor.

Share this post


Link to post
Share on other sites

Isso vai sobrecarregar o banco, ficar fazendo uma consulta a cada letra digitada.

Se hoje quando você entra na tela você já tem todos os dados, aplique o filtro no dataset e jogue o dataset filtrado na grid. Caso ele apague todo o conteudo, jogue o dataset sem filtro.

Share this post


Link to post
Share on other sites

 

em c# eu faço mais ou menos assim e funciona

 

private void textBox1_TextChanged(object sender, EventArgs e)
		{
			SqlConnection conn = new SqlConnection("Password=mbm;Persist Security Info=True;User ID=sa;Initial Catalog=modelo_redex;Data Source=192.168.0.2\\SQLEXPRESS");	  
			SqlCommand	cmd  = new SqlCommand   ("select * from entidade", conn);

 

		conn.Open();

 

	  DataTable dt = new DataTable();

	  SqlDataAdapter da = new SqlDataAdapter(cmd);

 

	  da.Fill(dt);

	  DataView dv = new DataView(dt);

 

	  dv.RowFilter = "nm_entidade like'" + textBox1.Text + "%'";

	  dataGridView1.DataSource = dv;

	  conn.Close();

Nossa fiz um cadastro aqui só para agradecer a estas duas pessoas que sem querer me salvaram a vida. Estava enroscado justamente nisso no sistema aqui da empresa pois o diretor queria que o sistema de busca fosse deste jeito e eu não estava conseguindo fazer e nem achava na na Internet.

 

Obrigado garotas.

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.