none
como fazer um filtro de pesquisa nos dados do gridview usando textbox RRS feed

  • 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="&amp;gt;&amp;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;
            }

        }
    }

    sexta-feira, 15 de março de 2013 14:32

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
    quinta-feira, 21 de março de 2013 16:34

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
    quinta-feira, 21 de março de 2013 16:34
  • Valeu, muito obrigado Neuron
    terça-feira, 26 de março de 2013 12:16