Usuário com melhor resposta
como fazer um filtro de pesquisa nos dados do gridview usando textbox

Pergunta
-
Bom dia. Sou iniciante em programação C# para Web, estou fazendo um sistema de cadastro de clientes usando o Visual Studio 2008.
Tenho um gridview que me mostra todos os clientes, os clientes estao armazenados em um banco de dados sql.
Preciso fazer um filtro de pesquisa, a onde o usuario digita o nome do cliente em um TEXTBOX, e ai tem que aparecer todos os clientes com o nome que o usuario digitou, mais nao estou conseguindo fazer o filtro.
Alguem pode me ajudar?
Obrigado
--- Pagina.ASPX ---
<%@ Page Title="ListaClientes" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ListaCliente.aspx.cs" Inherits="Prototipo.Views.ListaCliente" %>
<%@ Register Src="~/Classes/Etc/DialogoConfirmacao.ascx" TagName="DialogoConfirmacao" TagPrefix="uc1" %>
<asp:Content ID="ScriptsContent1" ContentPlaceHolderID="ScriptsContent" runat="server">
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Cliente
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server" >
<h2 style="text-align:left">
Clientes Cadastrados</h2>
<div align="left" >
<div id="AbaNome" class="areaLinha">
<span >Pesquisar Cliente:</span>
<asp:TextBox ID="txtNome" runat="server" Width="318" MaxLength="150" ToolTip="Digite o nome do cliente"></asp:TextBox>
<asp:Button ID="btnLimpar" runat="server" Text="Limpar" ToolTip="Limpar campos de pesquisa" onclick="btnLimpar_Click" />
<asp:Button ID="btnPesquisar" runat="server" Text="Pesquisar" onclick="btnPesquisar_Click" />
</div></br>
<asp:GridView ID="GridView1" runat="server" Width="100%" Height="100%" AutoGenerateColumns="False"
onrowcommand="GridView1_RowCommand"
onrowdatabound="GridView1_RowDataBound"
AllowPaging="True" CellPadding="4" ForeColor="#333333" GridLines="None"
style="margin-bottom: 0px"
DataSourceID="sClientes"
DataKeyNames="numatriculacliente" AllowSorting="True" PageSize="20" >
<PagerSettings
NextPageText="&gt;&gt;" Mode="NumericFirstLast" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" HorizontalAlign="Left" />
<Columns>
<asp:BoundField DataField="numatriculacliente" HeaderText="Código" />
<asp:BoundField DataField="nmcliente" HeaderText="Nome" />
<asp:BoundField DataField="nmLocalidade" HeaderText="Localidade" />
<asp:TemplateField ShowHeader="False" >
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="false"
CommandName="Alterar" ImageUrl="~/images/ic_editar.gif" Text="Alterar" CommandArgument='<%# Eval("numatriculacliente")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:ImageButton ID="btnDeletar" runat="server" CausesValidation="False" ImageUrl="~/images/ic_excluir.gif" AlternateText="Excluir" ToolTip="Excluir"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerStyle CssClass="menu_down" BackColor="#284775" ForeColor="Black"
HorizontalAlign="Right" VerticalAlign="Bottom" Wrap="False" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" ForeColor="Black" CssClass="menu_up" />
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
<asp:ObjectDataSource ID="sClientes" runat="server" SelectMethod="Buscar"
TypeName="Dao.ClientesDao" ></asp:ObjectDataSource>
</div>
<div >
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Novo" />
</div>
<uc1:DialogoConfirmacao ID="DialogoConfirmacao1" runat="server" ConfirmMessage="Deseja realmente excluir o registro?" DialogTitle="Excluir" />
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="Back_function" runat="server">
</asp:Content>--- Pagina.ASPX.CS ---
using System;
using System.Collections.Generic;
using System.CodeDom;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Dao;
using Etc;
namespace Prototipo.Views
{
public partial class ListaCliente : BasePage
{
//public event EventHandler PesquisarClick;
#region Public
public string Nome
{
get
{
return txtNome.Text;
}
set
{
txtNome.Text = value;
}
}
public event EventHandler PesquisarClick;
#endregion
#region Private and Protected
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
CarregarCookies();
}
protected void btnLimpar_Click(object sender, EventArgs e)
{
Response.Cookies.Add(new HttpCookie("cliente_nome", ""));
txtNome.Text = "";
}
protected void btnPesquisar_Click(object sender, EventArgs e)
{
Response.Cookies.Add(new HttpCookie("cliente_nome", txtNome.Text));
if (PesquisarClick != null)
PesquisarClick(this, EventArgs.Empty);
}
private void CarregarCookies()
{
if (Request.Cookies["cliente_nome"] != null)
{
txtNome.Text = Request.Cookies["cliente_nome"].Value;
}
}
#endregion
protected void txtClientel_TextChanged(object sender, EventArgs e)
{
}
protected override void Deletar()
{
int idx;
if (ClientParameters.ContainsKey("rowindex"))
{
idx = System.Convert.ToInt32(ClientParameters["rowindex"].Value);
ClientesDao p = new ClientesDao();
p.Remover(idx);
}
GridView1.DataBind();
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "Alterar":
//Pega a linha selecionada
int index = Convert.ToInt32(e.CommandArgument);
// envia dados para pagina
Server.Transfer("~/Views/Cliente.aspx?Cliente=" + index);
break;
case "Excluir":
break;
} // switch
}
protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
ImageButton b = null;
if (e.Row.Cells.Count > 1)
b = e.Row.Cells[4].FindControl("btnDeletar") as ImageButton;
Decimal idx;
if (b != null)
{
idx = System.Convert.ToDecimal(GridView1.DataKeys[e.Row.RowIndex].Value);
b.OnClientClick = string.Format("prepareOpenDialog('{0}'); return false", idx);
}
}
protected void Back_button_Click(object sender, ImageClickEventArgs e)
{
Response.Redirect("~/Views/Home.aspx");
}
protected void New_Estacao_Click(object sender, ImageClickEventArgs e)
{
Response.Redirect("~/Views/Cliente.aspx");
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("~/Views/Cliente.aspx");
}
}
}--- PaginaDAO.cs ---
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using Modelos;
using Oracle.DataAccess.Client;
namespace Dao
{
/// <summary>
/// DAO para classe Empregado, apenas para consulta.
/// Para efeito de exemplo.
///
/// Para outras implementações, implementar Inserir, Atualizar e Remover.
/// Esta classe serve como base para entendimento da estrutura Dao utilizando Database (ADO.NET) e OraDatabase.
/// </summary>
public class ClientesDao : BaseDao
{
/*Busca todos os clientes na tabela CLIENTE do GESPEC*/
public List<Cliente> Buscar()
{
List<Cliente> lst = new List<Cliente>();
DataTable table = BancoDados.fetch(sql);
DbDataReader reader = table.CreateDataReader();
while (reader.Read())
{
Cliente c = preencher(reader);
lst.Add(c);
}
return lst;
}
/*Busca todas as unidades organizacoes na tabela corporativa*/
public List<Cliente> BuscarUnidade()
{
List<Cliente> lst = new List<Cliente>();
DataTable table = BancoDados.fetch(sqlUnidade);
DbDataReader reader = table.CreateDataReader();
while (reader.Read())
{
Cliente c = preencherUnidade(reader);
lst.Add(c);
}
return lst;
}
/*Busca todas as localidades cadastradas no SISLOC*/
public List<Cliente> BuscarLocalidade()
{
List<Cliente> lst = new List<Cliente>();
DataTable table = BancoDados.fetch(sqlLocalidade);
DbDataReader reader = table.CreateDataReader();
while (reader.Read())
{
Cliente c = preencherLocalidade(reader);
lst.Add(c);
}
return lst;
}
public Cliente Consultar(decimal matricula)
{
Cliente c = null;
string tmp = string.Format(sqlConsultar, matricula);
List<Cliente> lst = new List<Cliente>();
DataTable table = BancoDados.fetch(tmp);
DbDataReader reader = table.CreateDataReader();
if (reader.Read())
{
c = preencher(reader);
}
return c;
}
public void Inserir(Cliente e)
{
OracleParameter[] arrPar = new OracleParameter[9];
for (int i = 0; i < 9; i++) arrPar[i] = new OracleParameter();
arrPar[0].ParameterName = "P_NUMATRICULACLIENTE";
arrPar[0].Value = e.numatriculacliente;
arrPar[1].ParameterName = "P_NMCLIENTE";
arrPar[1].Value = e.nmcliente.Trim();
arrPar[2].ParameterName = "P_NMLOCALIDADE";
arrPar[2].Value = e.nmlocalidade.Trim();
arrPar[3].ParameterName = "P_SGSIGLAUNIDADE";
arrPar[3].Value = e.sgsiglaunidade.Trim();
arrPar[4].ParameterName = "P_DSCATEGORIA";
arrPar[4].Value = e.dscategoria.Trim();
arrPar[5].ParameterName = "P_DSEMAIL";
arrPar[5].Value = e.dsemail.Trim();
arrPar[6].ParameterName = "P_DSSENHA";
arrPar[6].Value = e.dssenha.Trim();
arrPar[7].ParameterName = "P_TELEFONE";
arrPar[7].Value = e.telefone.Trim();
arrPar[8].ParameterName = "P_DTRESPOSTA";
if (e.dtresposta == "")
arrPar[8].Value = "";
else
arrPar[8].Value = System.Convert.ToDateTime(e.dtresposta);
BancoDados.executeStoredProcedure("PC_GESPEC.SP_INSERI_CLIENTE", arrPar);
}
public void Atualizar(Cliente e)
{
OracleParameter[] arrPar = new OracleParameter[9];
for (int i = 0; i < 9; i++) arrPar[i] = new OracleParameter();
arrPar[0].ParameterName = "P_NUMATRICULACLIENTE";
arrPar[0].Value = e.numatriculacliente;
arrPar[1].ParameterName = "P_NMCLIENTE";
arrPar[1].Value = e.nmcliente.Trim();
arrPar[2].ParameterName = "P_NMLOCALIDADE";
arrPar[2].Value = e.nmlocalidade.Trim();
arrPar[3].ParameterName = "P_SGSIGLAUNIDADE";
arrPar[3].Value = e.sgsiglaunidade.Trim();
arrPar[4].ParameterName = "P_DSCATEGORIA";
arrPar[4].Value = e.dscategoria.Trim();
arrPar[5].ParameterName = "P_DSEMAIL";
arrPar[5].Value = e.dsemail.Trim();
arrPar[6].ParameterName = "P_DSSENHA";
arrPar[6].Value = e.dssenha.Trim();
arrPar[7].ParameterName = "P_TELEFONE";
arrPar[7].Value = e.telefone.Trim();
arrPar[8].ParameterName = "P_DTRESPOSTA";
if (e.dtresposta == "")
arrPar[8].Value = "";
else
arrPar[8].Value = System.Convert.ToDateTime(e.dtresposta);
BancoDados.executeStoredProcedure("PC_GESPEC.SP_ATUALIZA_CLIENTE", arrPar);
}
public void ImportaCliente()
{
BancoDados.executeStoredProcedure("SP_CLIENTE", null);
}
public void Remover(decimal mat)
{
OracleParameter[] arrPar = new OracleParameter[1];
for (int i = 0; i < 1; i++) arrPar[i] = new OracleParameter();
arrPar[0].ParameterName = "P_NUMATRICULACLIENTE";
arrPar[0].Value = mat;
BancoDados.executeStoredProcedure("PC_GESPEC.SP_EXCLUI_CLIENTE", arrPar);
}
//Select -> Cliente
const string sql = "select NUMATRICULACLIENTE, NMCLIENTE, nvl(NMLOCALIDADE, ' '),nvl(SGSIGLAUNIDADE, ' '),NVL(DSCATEGORIA,'-'),NVL(DSEMAIL,'-'),nvl(DSSENHA, '-'),nvl(TELEFONE,'-'), nvl(to_char(DTRESPOSTA,'DD/MM/YYYY'),'-') from CLIENTE order by NMCLIENTE, NUMATRICULACLIENTE";
const string sqlConsultar = "select NUMATRICULACLIENTE, nvl(NMCLIENTE,' '), nvl(NMLOCALIDADE, ' '), nvl(SGSIGLAUNIDADE, ' '), nvl(DSCATEGORIA,' '), nvl(DSEMAIL,' '), nvl(DSSENHA,' '), nvl(TELEFONE,' '), nvl(to_char(DTRESPOSTA,'DD/MM/YYYY'),' ') from CLIENTE WHERE NUMATRICULACLIENTE = {0}";
//Select -> Unidade
const string sqlUnidade = "select ' ' as sgunidadeorganiz from dual union select distinct sgunidadeorganiz as sgunidadeorganiz from corporativo.unidadeorganizacional where stsituacao = 'A'";
//Select -> Localidade
const string sqlLocalidade = "select ' ' as nome_localidade from dual union select distinct nome_localidade from sisloc.localidades";
private Cliente preencher(DbDataReader reader)
{
Cliente c = new Cliente();
c.numatriculacliente = reader.GetDecimal(0);
c.nmcliente = reader.GetString(1);
c.nmlocalidade = reader.GetString(2);
c.sgsiglaunidade = reader.GetString(3);
c.dscategoria = reader.GetString(4);
c.dsemail = reader.GetString(5);
c.dssenha = reader.GetString(6);
c.telefone = reader.GetString(7);
c.dtresposta = reader.GetString(8);
return c;
}
private Cliente preencherUnidade(DbDataReader reader)
{
Cliente c = new Cliente();
c.sgsiglaunidade = reader.GetString(0);
return c;
}
private Cliente preencherLocalidade(DbDataReader reader)
{
Cliente c = new Cliente();
c.nmlocalidade = reader.GetString(0);
return c;
}
}
}- Movido Levi DomingosModerator quarta-feira, 20 de março de 2013 20:43
Respostas
-
Você não implementou o filtro sobre o ObjectDataSource sClientes, que é de onde vêm os dados da GridView.
É necessário escrever outro método na classe ClientesDao que aceite um parâmetro de nome como filtro:
public List<Cliente> BuscarPorNome(string nome) { List<Cliente> lst = new List<Cliente>(); DataTable table = BancoDados.fetch(/* sql que trata do nome passado como parametro */); DbDataReader reader = table.CreateDataReader(); while (reader.Read()) { Cliente c = preencher(reader); lst.Add(c); } return lst; }
Depois que isso for feito, deve-se fazer o código que liga o botão de Pesquisar ao data source:
protected void btnPesquisar_Click(object sender, EventArgs e) { sClientes.SelectParameters.Clear(); sClientes.SelectParameters.Add("nome", txtNome.Text); sClientes.DataBind(); }
A tag do ObjectDataSource sClientes ficará assim:
<asp:ObjectDataSource ID="sClientes" runat="server" SelectMethod="BuscarPorNome"
TypeName="Dao.ClientesDao"></asp:ObjectDataSource>
- Editado neuron_upheaval quinta-feira, 21 de março de 2013 16:36 A tag não apareceu como eu queria
- Marcado como Resposta Felipo Gonçalves quinta-feira, 21 de março de 2013 18:09
Todas as Respostas
-
Você não implementou o filtro sobre o ObjectDataSource sClientes, que é de onde vêm os dados da GridView.
É necessário escrever outro método na classe ClientesDao que aceite um parâmetro de nome como filtro:
public List<Cliente> BuscarPorNome(string nome) { List<Cliente> lst = new List<Cliente>(); DataTable table = BancoDados.fetch(/* sql que trata do nome passado como parametro */); DbDataReader reader = table.CreateDataReader(); while (reader.Read()) { Cliente c = preencher(reader); lst.Add(c); } return lst; }
Depois que isso for feito, deve-se fazer o código que liga o botão de Pesquisar ao data source:
protected void btnPesquisar_Click(object sender, EventArgs e) { sClientes.SelectParameters.Clear(); sClientes.SelectParameters.Add("nome", txtNome.Text); sClientes.DataBind(); }
A tag do ObjectDataSource sClientes ficará assim:
<asp:ObjectDataSource ID="sClientes" runat="server" SelectMethod="BuscarPorNome"
TypeName="Dao.ClientesDao"></asp:ObjectDataSource>
- Editado neuron_upheaval quinta-feira, 21 de março de 2013 16:36 A tag não apareceu como eu queria
- Marcado como Resposta Felipo Gonçalves quinta-feira, 21 de março de 2013 18:09
-