ASP .NET - Filtrando informações em um GridView (C#) (revisão)

 No artigo de hoje vou mostrar como podemos procurar registros e filtrar informações em um controle GridView usando a propriedade FilterParameters do SqlDataSource.

Eu já escrevi muitos artigos sobre o controle GridView em aplicações ASP .NET e se você esta começando agora sugiro que leia os meus artigos nas referências para saber mais sobre o GridView.

Existem muitas formas de filtrar informações em uma aplicação ASP .NET, mas se você esta usando o componente GridView vinculando a um SqlDataSource essa tarefa fica muito simples usando a propriedade FilterParameters.

Este artigo explica como usar os recursos FilterExpressioon e FilterParameters do SqlDataSource para filtrar registros em um controle GridView.

Este é um artigo para iniciantes que desejam aprender uma técnica básica para filtrar informações em uma aplicação ASP .NET usando o GridView vinculado ao SqlDataSource.

É uma técnica simples e útil que pode ser usada em aplicações pessoais ou de pequeno porte em um pequeno negócio que esta usando uma aplicação ASP .NET.

Recursos usados

Definindo a fonte de dados

Você pode usar qualquer banco de dados SQL Server ou qualquer outra fonte de dados mas nesse artigo eu vou usar o banco de dados Cadastro.mdf e a tabela Contatos.

Abaixo temos a estrutura da tabela e o script para gerá-la no SQL Server Management Studio:

USE [Cadastro]
GO
CREATE TABLE [dbo].[Contatos](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Nome] [nvarchar](100) NULL,
	[Email] [nvarchar](150) NULL,
	[Sexo] [nchar](10) NULL,
 CONSTRAINT [PK_Contatos] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

 

A string de conexão usada para esse banco de dados é : Data Source=.\sqlexpress;Initial Catalog=Cadastro;Integrated Security=True

Nota: Você pode usar o banco de dados Northwind.mdf que pode ser baixado neste link :  Northwind database - Home

Criando o projeto ASP .NET no VS Community

Abra o VS Community 2015  e clique em New Project;

A seguir selecione Visual C# ->  ASP .NET Web Application

Informe o nome FiltrarValores_GridView e clique no botão OK;

Selecione o template Empty e marque Web Forms;

A seguir no menu Project clique em Add New Item e selecione o template Web Form informando o nome Default.aspx:

Agora vamos incluir os seguintes controles a partir da ToolBox na página Default.aspx no modo Design:

A seguir vamos configurar o SqlDataSource para acessar a tabela Contatos do banco de dados Cadastro.mdf.

Selecione o SqlDataSource e clique no link Configure Data Source;

Selecione a conexão com o banco de dados Cadastro.mdf e clique em Next>:

Selecione a tabela Contatos. marque os campos que deseja exibir no gridview e clique em Next>:

Finalmente selecione o gridview e em Choose Data Source selecione o SqlDataSource1 que representa a nossa fonte de dados:

Neste momento temos os dados da tabela Contatos vinculados ao controle GridView. O código fonte gerado pode ser visto a seguir:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="FiltrarValores_GridView.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="gdvAlunos" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="SqlDataSource1" Height="180px" Width="389px">
            <Columns>
                <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" ReadOnly="True" SortExpression="Id" />
                <asp:BoundField DataField="Nome" HeaderText="Nome" SortExpression="Nome" />
                <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
                <asp:BoundField DataField="Sexo" HeaderText="Sexo" SortExpression="Sexo" />
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:CadastroConnectionString %>" 
            SelectCommand="SELECT [Id], [Nome], [Email], [Sexo] FROM [Contatos]">
        </asp:SqlDataSource>
    </div>
    </form>
</body>
</html>

Neste momento vamos usar duas propriedades importantes no código no interior da tag <asp:SqlDataSource> :

  1. FilterExpression - contém o filtro que é parte da consulta SQL com um espaço reservado que será substituído pelo valor do ControlParameter (um controle que desejamos usar para fornecer a informação);
  2. FilterParameter - contém o parâmetro do controle a ser usado pela FilterExpression;

Nota: Se você definir a propriedade AllowPaging como True o resultado da pesquisa se aplicará a página atual.

Neste exemplo vamos usar um controle TextBox na página para poder informar o critério para realizar o filtro das informações.

Para isso vamos incluir um controle TextBox (ID=txtFiltrar) , um controle Button(ID=btnSubmeter) e um controle Label(ID=lblmsg) na página Default.aspx conforme abaixo:

Vamos definir a FilterExpression para filtrar pelo nome usando a cláusula Like:

SelectCommand="SELECT [Id], [Nome], [Email], [Sexo] FROM [Contatos]" FilterExpression="[Nome] LIKE '%{0}%'">

E definir o FilterParameters para usar um controle TextBox com o ID igual a txtFiltrar filtrando pelo campo Nome:

<FilterParameters>
     <
asp:ControlParameter Name="Nome" ControlID="txtFiltrar" PropertyName="Text" />
</
FilterParameters>

O código gerado pode ser visto abaixo:

Para obter o número de linhas que atende o critério vamos usar o evento RowCreated do controle GridView onde vamos definir o seguinte código:

 protected void gdvAlunos_RowCreated(object sender, GridViewRowEventArgs e)
  {
            if (!string.IsNullOrEmpty(txtFiltrar.Text))
            {
                lblmsg.InnerText = "Econtrado(s) " + gdvAlunos.Rows.Count +
                    " linhas que atendem o critério '" + txtFiltrar.Text + "'.";
            }
  }

Executando o projeto e definindo um texto para ser usado como critério de filtro teremos:

Aplicando o filtro iremos obter:

Pegue o projeto completo aqui :   FiltrarValores_GridView.zip (sem as referências)

Respondeu Jesus: O meu reino não é deste mundo; se o meu reino fosse deste mundo, pelejariam os meus servos, para que eu não fosse entregue aos judeus; mas agora o meu reino não é daqui.
João 18:36

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

     Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti