Pesquisar valor num datagridview
12/09/2010
0
Sávio Costa
Posts
15/09/2010
Vinicius Vieira
obs: para ligar o datagrid no bindingsource vc vai na toolbox e arrasta um componente bindingsource para a tela e depos clica no data grid e em cima dele vai aparecer uma setinha você clica e na comobox choose data source você escolhe o binding que acabou de criar //Eu declaro um variavel filtro que muda de acordo com a coluna clicada que vai ser o que eu vou usar para filtrar o binding posteriormente. protected string filtro = "ID LIKE '%'"; //no evento cellclick do datagrid eu mudo essa string filto com o nome do campo no binding o será o valor do textbox, mudo também um lable que retula o textbox onde se digita o que vai pequisar public void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (dtgListaPesquisaBase.Rows.Count > 0 && e.ColumnIndex!=-1) { lblFiltro.Text = dtgListaPesquisaBase.Columns[e.ColumnIndex].HeaderText + ":"; filtro = dtgListaPesquisaBase.Columns[e.ColumnIndex].DataPropertyName + " LIKE '%'"; } }//no evento textchanged do textbox eu já vou fazendo o filtro se esse boleano FiltroNaDigitaca estiver marcado assim a pesquisa é restringida a cada caractere que o cara vai digitando. public void txtFiltro_TextChanged(object sender, EventArgs e) { if (FiltroNaDigitacao) { if (bindingSource1.DataSource != null) { if (filtro == string.Empty) { lblFiltro.Text = dtgListaPesquisaBase.Columns[IndiceColunaInicial].HeaderText + ":"; filtro = dtgListaPesquisaBase.Columns[IndiceColunaInicial].DataPropertyName+ " LIKE '%'"; }
string valor = txtFiltro.Text.Trim(); if (valor == string.Empty) { bindingSource1.Filter = valor; } else { //AQUI É ONDE DE FATO SE FAZ O FILTRO NO BINDINGSOURCE eu passo o valor daquela string filtro substituindo o pelo valor do textbox bindingSource1.Filter = string.Format(filtro, valor); } } } }
//Eu tenho a opcao de deixar o cara digitar tudo e depois clicar e nesse método é onde eu faço essa pesquisa private void btnPesquisar_Click(object sender, EventArgs e) { if (bindingSource1.DataSource != null) { if (filtro == string.Empty) { lblFiltro.Text = dtgListaPesquisaBase.Columns[dtgListaPesquisaBase.FirstDisplayedCell.ColumnIndex].HeaderText+":"; filtro = dtgListaPesquisaBase.Columns[dtgListaPesquisaBase.FirstDisplayedCell.ColumnIndex].DataPropertyName + " LIKE '%'"; }
string valor = txtFiltro.Text.Trim(); if (valor == string.Empty) { bindingSource1.Filter = valor; } else { //AQUI É ONDE DE FATO SE FAZ O FILTRO NO BINDINGSOURCE eu passo o valor daquela string filtro substituindo o pelo valor do textbox bindingSource1.Filter = string.Format(filtro, valor); } } } espero ter ajudado
19/09/2010
Rafael Tomitão
Uma dúvida, eu acesso o banco, e na classe de negócio eu crio uma List<> e faço o filtro pela List<>.
Por exemplo
List<Aluno> alu; alu = escola.Alunos.FindAll(delegate(Aluno a) { return a.nome.StartsWith(textBox1.Text); }); if (alu != null) { dataGridView1.DataSource = alu; }
assim é errado?
Obs.: Uso C#.net + MySql (sem ODBC)
grato,
Rafael Tomitão
20/09/2010
Vinicius Vieira
20/09/2010
Rafael Tomitão
Pra falar a verdade eu nunca usei o bindingsource. Por isso perguntei.
E sobre o exemplo que citei, eu acesso o banco somente uma vez, preencho a List<Aluno> e depois o filtro eu aplico diretamente na Lista, não volto ao banco para buscar mais nada.
Estive lendo na .net magazine desse mês sobre o Linq, e também da pra fazer o filtro por ele.
usando o bindingsource, vc vai ao banco só uma vez?
Por exemplo vc busca todos os alunos e depois aplica o filtro somente no bindingsource?
da pra eu usar o bindingsource com mysql sem ODBC?
grato,
Rafael Tomitão
21/09/2010
Vinicius Vieira
Clique aqui para fazer login e interagir na Comunidade :)