Ir para conteúdo

Arquivado

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

ecf

Filtro de Dados + Texbox + GridView

Recommended Posts

Boa tarde!

 

Estou tentando fazer um filtro de dados, onde ao digitar alguma palavra num texbox e clicar num botão BUSCAR, irá mostrar todos os registros que contém aquela palavra num GridView;

 

Fiz assim:

 

private DataSet ds;

 

protected void Page_Load(object sender, EventArgs e)

 

{

 

OleDbConnection conexao;

 

conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/CFNEW/Sag-acess.mdb;");

 

conexao.Open();

 

OleDbDataAdapter da = new OleDbDataAdapter("Select CFTXNOMEF From [CF-CLIENTE FORNECEDOR]", conexao);

 

ds = new DataSet();

 

da.Fill(ds, "[CF-CLIENTE FORNECEDOR]");

 

GridViewConsulta.DataSource = ds.Tables["CF-CLIENTE FORNECEDOR"];

 

}

 

protected void Button1_Click1(object sender, EventArgs e)

{

ds.Tables["CF-CLIENTE FORNECEDOR"].DefaultView.RowFilter= "CFTXNOMEF LIKE '%" + TXTBUSCAR.Text + "%'";

}

 

Porém está dando um erro na linha:

 

ds.Tables["CF-CLIENTE FORNECEDOR"].DefaultView.RowFilter= "CFTXNOMEF LIKE '%" + TXTBUSCAR.Text + "%'";

 

Erro: Object reference not set to an instance of an object.

 

(No momento que vou buscar o registro)

 

Tenho que fazer mais alguma coisa?

 

Estanciar algum objeto q ficou faltando?

 

Linkar o GridView?

 

Etc...?

 

Já debuguei e não consegui solucionar o problema...

 

Alguém sabe o q está errado, ou outra forma de fazer esse filtro, por favor?

 

 

Desde ja eu agradeço.

 

Muito Obrigada;

 

Att.: ecf

Compartilhar este post


Link para o post
Compartilhar em outros sites

ecf eu testei seu código, não deu erro, mas a Grid sequer carregou, acho que faltou o GridViewConsulta.DataBind(); tenta desta forma:

private DataSet ds;

	protected void Page_Load(object sender, EventArgs e){
		OleDbConnection conexao;
		conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/CFNEW/Sag-acess.mdb;");

		conexao.Open();

		OleDbDataAdapter da = new OleDbDataAdapter("Select CFTXNOMEF From [CF-CLIENTE FORNECEDOR]", conexao);

		ds = new DataSet();

		da.Fill(ds, "[CF-CLIENTE FORNECEDOR]");

		GridViewConsulta.DataSource = ds.Tables["CF-CLIENTE FORNECEDOR"];
		GridViewConsulta.DataBind();
	}
	protected void Button1_Click(object sender, EventArgs e) {
		ds.Tables["CF-CLIENTE FORNECEDOR"].DefaultView.RowFilter = "CFTXNOMEF LIKE '%" + TXTBUSCAR.Text + "%'";
		GridViewConsulta.DataBind();
	}

Espero que de certo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ecf eu testei seu código, não deu erro, mas a Grid sequer carregou, acho que faltou o GridViewConsulta.DataBind(); tenta desta forma:

private DataSet ds;

	protected void Page_Load(object sender, EventArgs e){
		OleDbConnection conexao;
		conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/CFNEW/Sag-acess.mdb;");

		conexao.Open();

		OleDbDataAdapter da = new OleDbDataAdapter("Select CFTXNOMEF From [CF-CLIENTE FORNECEDOR]", conexao);

		ds = new DataSet();

		da.Fill(ds, "[CF-CLIENTE FORNECEDOR]");

		GridViewConsulta.DataSource = ds.Tables["CF-CLIENTE FORNECEDOR"];
		GridViewConsulta.DataBind();
	}
	protected void Button1_Click(object sender, EventArgs e) {
		ds.Tables["CF-CLIENTE FORNECEDOR"].DefaultView.RowFilter = "CFTXNOMEF LIKE '%" + TXTBUSCAR.Text + "%'";
		GridViewConsulta.DataBind();
	}

Espero que de certo...

 

Bom dia;

 

Aff..não funcionou...

 

O erro continua....

 

Tem outra maneira de filtrar dados de um texbox e mostrar no grid sem ser assim...?

 

Muito Obrigado;

Att.: ecf

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara esse código que eu postei funcionou, mas vou colocar a forma com que eu trabalho, talvez sirva:

static string Sql;

	protected void Page_Load(object sender, EventArgs e){
		if (!IsPostBack) {
			Sql = "SELECT NOME FROM USUARIO WHERE 1=1";
			if ((Request["Nome"] != "") && (Request["Nome"] != null)) {
				Sql += " AND NOME LIKE '"+ Request["Nome"] +"%'";
			}
			MontaGrid(GridViewConsulta, Sql);
		}
	}
	protected void Button1_Click(object sender, EventArgs e) {
		Response.Redirect("Teste.aspx?Nome="+ TXTBUSCAR.Text);
	}

	protected void MontaGrid(GridView gv, string vSql) {
		VerificaCon(1);
		string StringCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/CFNEW/Sag-acess.mdb;";
		OleDbDataAdapter DtF;
		DataSet DsF = new DataSet();
		DtF = new OleDbDataAdapter(vSql, StringCon);
		DtF.Fill(DsF, "dados");
		DtF.Dispose();
		VerificaCon(2);
		gv.DataSource = DsF.Tables["dados"].DefaultView;
		gv.DataBind();
	}

O VerificaCon simplesmente abre e fecha conexão, espero que ajude...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara esse código que eu postei funcionou, mas vou colocar a forma com que eu trabalho, talvez sirva:

static string Sql;

	protected void Page_Load(object sender, EventArgs e){
		if (!IsPostBack) {
			Sql = "SELECT NOME FROM USUARIO WHERE 1=1";
			if ((Request["Nome"] != "") && (Request["Nome"] != null)) {
				Sql += " AND NOME LIKE '"+ Request["Nome"] +"%'";
			}
			MontaGrid(GridViewConsulta, Sql);
		}
	}
	protected void Button1_Click(object sender, EventArgs e) {
		Response.Redirect("Teste.aspx?Nome="+ TXTBUSCAR.Text);
	}

	protected void MontaGrid(GridView gv, string vSql) {
		VerificaCon(1);
		string StringCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/CFNEW/Sag-acess.mdb;";
		OleDbDataAdapter DtF;
		DataSet DsF = new DataSet();
		DtF = new OleDbDataAdapter(vSql, StringCon);
		DtF.Fill(DsF, "dados");
		DtF.Dispose();
		VerificaCon(2);
		gv.DataSource = DsF.Tables["dados"].DefaultView;
		gv.DataBind();
	}

O VerificaCon simplesmente abre e fecha conexão, espero que ajude...

 

Bom dia!

 

..Intaum...esse código q você postou...não funcionou aqui.....quando eu clico no botão BUSCAR não carrega Grid...nem faz nada..não entendi!

Aqui...será que eu tenho que fazer um AccessDataSource para o Grid...ou não?

Porque não consigo fazer esse filtro de forma alguma...e preciso dele urgente...Aff! Desespero!

 

Obrigado;

Att.: ecf

Compartilhar este post


Link para o post
Compartilhar em outros sites

A forma com que eu trabalho no botão eu chamo a mesma página, dou um redirect para a mesma página passando na url o texto que foi colocado no TextBox, como você fez seu botão?

Acho estranho, pois até mesmo seu primeiro código funciona pra mim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A forma com que eu trabalho no botão eu chamo a mesma página, dou um redirect para a mesma página passando na url o texto que foi colocado no TextBox, como você fez seu botão?

Acho estranho, pois até mesmo seu primeiro código funciona pra mim.

Intaum...vou t passar tudo o q fiz....

 

Na primeira vez fiz assim:

 

private dataset ds;

 

protected void Page_Load(object sender, EventArgs e){

OleDbConnection conexao;

conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/CFNEW/Sag-acess.mdb;");

conexao.Open();

OleDbDataAdapter da = new OleDbDataAdapter("Select CFTXNOMEF From [CF-CLIENTE FORNECEDOR]", conexao);

ds = new DataSet();

da.Fill(ds, "[CF-CLIENTE FORNECEDOR]");

GridViewConsulta.DataSource = ds.Tables["CF-CLIENTE FORNECEDOR"];

GridViewConsulta.DataBind()

}

 

protected void Button1_Click1(object sender, EventArgs e){

ds.Tables["CF-CLIENTE FORNECEDOR"].DefaultView.RowFilter = "CFTXNOMEF LIKE '%" + TXTBUSCAR.Text + "%'";

}

 

Na página Cadastro.aspx tenho um texbox, um gridview e um botão;

Ob: Eu não linkei nenhum accessdatasource para o gridview..teria q linkar?

...fiz simplesmente isso..mais nada...

 

Quando eu digito alguma coisa no texbox...e clico no botão BUSCAR ele teria q listar pra mim no gridview, todos os registros ja cadastrados que tivesse aquele nome que eu digitei...ok?

Porém quando eu digito algo no texbox e clico no botão ele me traz esse erro:

 

Erro: Object reference not set to an instance of an object.

 

---------------

 

Daí fiz assim...da forma q você me passou: veja:

 

 

static string Sql;

 

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

 

Sql = "SELECT CFTXNOMEF FROM [CF-CLIENTE FORNECEDOR] WHERE 1=CFTXNOMEF";

 

if ((Request["CFTXNOMEF"] != "") && (Request["CFTXNOMEF"] != null))

{

 

Sql += " AND CFTXNOMEF LIKE '" + Request["CFTXNOMEF"] + "%'";

}

MontaGrid(gv, Sql);

 

}

 

protected void Button1_Click1(object sender, EventArgs e)

{

Response.Redirect("Cadastro.aspx?CFTXNOMEF=" + TXTBUSCAR.Text);

}

 

protected void MontaGrid(GridView gv, string vSql)

{

OleDbConnection conexao;

conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/CFNEW/Sag-acess.mdb;");

conexao.Open();

OleDbDataAdapter DtF;

DataSet DsF = new DataSet();

DtF = new OleDbDataAdapter(vSql, conexao);

DtF.Fill(DsF, "CF-CLIENTE FORNECEDOR");

DtF.Dispose();

gv.DataSource = DsF.Tables["CF-CLIENTE FORNECEDOR"].DefaultView;

gv.DataBind();

}

 

 

...Ob: Dessa vez..não fez nada...nerm erro...ném carregou gridview...nadinha...

 

O q devo estar fazendo de errado?

você tem alguma idéia.....aff....

 

Obrigado.

Att.: ecf

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia é essa mesmo, achei estranho essa query:

SELECT CFTXNOMEF FROM [CF<span style='color:orange'>-CLIENTE FORNECEDOR] WHERE 1=CFTXNOMEF

 

Você já testou ela diretamente no banco de dados pra ver se retorna dados?

Bom dia!

 

Coloquei errado..é assim:

 

SELECT CFTXNOMEF FROM [CF-CLIENTE FORNECEDOR] WHERE 1=1

 

Testei e funciona direitinho...no banco;

 

Mas no sistema não funciona...Aff..preciso fazer esse sistema funcionar..só falta essa parte...e não consigo descobrir o q deve ser...Estress....\*~*/

 

Obrigado.

Att.: ecf

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca um break point na sua função MontaGrid e veja o valor do parâmetro vSql, teste a query no banco, se der certo no banco tem que funcionar no sistema, a não ser que esteja em bancos diferentes. Outra coisa posta o código HTML da sua Grid...

 

Da uma olhada, quem sabe é isso também: http://forum.imasters.com.br/index.php?showtopic=263921

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca um break point na sua função MontaGrid e veja o valor do parâmetro vSql, teste a query no banco, se der certo no banco tem que funcionar no sistema, a não ser que esteja em bancos diferentes. Outra coisa posta o código HTML da sua Grid...

 

Da uma olhada, quem sabe é isso também: http://forum.imasters.com.br/index.php?showtopic=263921

 

Bom dia!

 

Coloquei o break point na função MontaGridView e o valor do parâmetro vSql na primeira vez foi :

 

SELECT CFTXNOMEF FROM [CF-CLIENTE FORNECEDOR] WHERE 1=1

 

Na segunda vez foi: SELECT CFTXNOMEF FROM [CF-CLIENTE FORNECEDOR] WHERE 1=1 AND CFTXNOMEF LIKE 'elai%'

 

Obs:(Este 'elai%' é a palavra q eu digitei no texbox pra ele filtrar todos os registros que tenham esta palavra )

 

Quando executei esta linha :

 

gv.DataSource = DsF.Tables["CF-CLIENTE FORNECEDOR"].DefaultView;

 

O valor do DefaultView foi todos os registros que tinham a palavra 'elai%' ..porém acho que o problema está no GridView...ele não está mostrando o resultado...

 

Aqui o código do Grid:

 

<asp:GridView ID="gview" runat="server" AutoGenerateColumns="False" BackColor="#CCCCCC" BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px" CellPadding="4" CellSpacing="2" ForeColor="Black">

<FooterStyle BackColor="#CCCCCC" />

<RowStyle BackColor="White" />

<SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />

<PagerStyle BackColor="#CCCCCC" ForeColor="Black" HorizontalAlign="Left" />

<HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />

</asp:GridView>

 

(Acho que o problema deve ser no GridView...em Como fazer para aparecer os dados filtrados...)

 

você tem alguma idéia?

Muito Obrigado;

 

Att.: ecf

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo, pelo que vi o problema esta na GridView, você setou a propriedade AutoGenerateColumns como False, ou seja ela não vai alimentar sozinha os campos na sua Grid, e você não adicionou nenhum campo manualmente.

Você tem duas opções setar a propriedade para True, desta forma todos os campos que estiverem na sua query serão adicionados na GridView, ou adicionar manualmente os campos, por exemplo:

 

<asp:GridView ID="gview" runat="server" AutoGenerateColumns="False" BackColor="#CCCCCC" BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px" CellPadding="4" CellSpacing="2" ForeColor="Black">
<FooterStyle BackColor="#CCCCCC" />
<RowStyle BackColor="White" />
<SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#CCCCCC" ForeColor="Black" HorizontalAlign="Left" />
<HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
       <Columns>
           <asp:BoundField DataField="CFTXNOMEF" HeaderText="Nome" />
       </Columns>
</asp:GridView>

 

Desta forma acima eu adicionei uma column manualmente.

Espero que ajude...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo, pelo que vi o problema esta na GridView, você setou a propriedade AutoGenerateColumns como False, ou seja ela não vai alimentar sozinha os campos na sua Grid, e você não adicionou nenhum campo manualmente.

Você tem duas opções setar a propriedade para True, desta forma todos os campos que estiverem na sua query serão adicionados na GridView, ou adicionar manualmente os campos, por exemplo:

 

<asp:GridView ID="gview" runat="server" AutoGenerateColumns="False" BackColor="#CCCCCC" BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px" CellPadding="4" CellSpacing="2" ForeColor="Black">
<FooterStyle BackColor="#CCCCCC" />
<RowStyle BackColor="White" />
<SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#CCCCCC" ForeColor="Black" HorizontalAlign="Left" />
<HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
       <Columns>
           <asp:BoundField DataField="CFTXNOMEF" HeaderText="Nome" />
       </Columns>
</asp:GridView>

 

Desta forma acima eu adicionei uma column manualmente.

Espero que ajude...

 

Ha valeu é isso msm....

Muito obrigado;

Att.: ecf

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.