ASP .NET - Model Binding com Web Forms - Ordenação, Paginação e Filtragem - III


Na segunda parte desta série de tutoriais vimos como realizar as operações de inclusão, exclusão e atualização de dados usando os recursos do Model Binding e da ASP .NET Scaffolding. (O scaffolding criou literalmente um esqueleto de código que iremos revisar e customizar.)

O termo scaffolding é  usado em programação para indicar que o código a que se refere é apenas um esqueleto usado para tornar a aplicação funcional, e se espera que seja substituído por algoritmos mais complexos à medida que o desenvolvimento da aplicação progride.(wikipédia)

Este tutorial veremos como ordenar, paginar e filtrar dados com model binding e web forms.

Estas propriedades recebem o nome do método que trata a operação correspondente e no método forneceremos a lógica para interação com os dados.

Vamos continuar usando o projeto criado na primeira parte do tutorial : Escola_Macoratti

Neste tutorial você vai aprender a:

Recursos usados neste tutorial:

Adicionando a ordenação dos dados

Abra a solução Escola_Macoratti criada na primeira parte deste artigo.

Habilitar a ordenação no controle GridView é muito fácil :

Você não precisa definir uma valor SortExpression para cada coluna, o DataField é automaticamente usado.O GridView modifica a consulta para incluir a ordenação nos dados pelo valor selecionado.

Se você alternar para o modo Source verá a propriedade definida no código: AllowSorting="True"

Agora basta rodar o projeto novamente e verificar a ordenação funcionando clicando sobre a coluna para qual deseja que a ordenação seja feita. No exemplo eu clique na coluna Nome para ordenar os dados pelo nome do aluno:

Adicionando a ordenação dos dados

Da mesma forma que a ordenação, a paginação pode ser feita de forma bem simples. Basta definir a propriedade AllowPaging como True e definir o valor da propriedade PageSize para o número de registros por página que deseja exibir.

Visualizando o código da página no modo Source você verá os valores definidos conforme abaixo:

Execute o projeto novamente e perceba que agora os registros são exibidos em mais de uma página com 5 registros por página conforme definimos:

Para paginar basta clicar no número inferior na base da página que indica a página atual. O GridView realiza uma consulta otimizada para aumentar o desempenho recuperando apenas os registros da página atual ao invés de todos os registros.

Filtrando os registros pela seleção do usuário

O Model Binding inclui diversos atributos que permitem que você especifique como definir o valor para um parâmetro no método model binding. Esses atributos estão definidos no namespace System.Web.ModelBinding e incluem:

  1. Control
  2. Cookie
  3. Form
  4. Profile
  5. QueryString
  6. RouteData
  7. Session
  8. UserProfile
  9. VIewState

Neste tutorial vamos usar os valores dos controles para filtrar quais registros serão exibidos no GridView.Vamos incluir o atributo Control ao método da consulta que foi criada anteriormente. Posteriormente iremos aplicar o atributo QueryString para o parâmetro para especificar que o valor do parâmetro tem origem em um valor query string.

A seguir, no arquivo Aluno.aspx, no modo Source, vamos adicionar um controle dropdownlist acima de ValidationSummary para filtrar quais alunos serão exibidos.

Abaixo temos o código a ser incluído:

      ...
        <br /><br />
        <asp:Label runat="server" Text="Exibir:" />
        <asp:DropDownList runat="server" AutoPostBack="true" ID="
ExibirAno">
            <asp:ListItem Text="Todos" Value="" />
            <asp:ListItem Text="Calouro" />
            <asp:ListItem Text="Segundanista" />
            <asp:ListItem Text="Junior" />
            <asp:ListItem Text="Senior" />
        </asp:DropDownList>
        ...

Após isso no arquivo code-behind Alunos.aspx.vb vamos modificar o método Select para receber o valor do controle e definir o nome do parâmetro para o nome do controle que fornece o valor.

Primeiro temos que incluir a instrução Imports para o namespace System.Web.ModelBinding para resolver o atributo Control:

Imports System.Web.ModelBinding

Depois temos que alterar o método select alunosGrid_GetDados para filtrar os dados retornados conforme o valor do controle dropdownlist. Incluindo um atributo Control antes de um parâmetro especifica que o valor para este parâmetro virá de um controle com o mesmo nome. A seguir temos o código modificado:

 Public Function alunosGrid_GetDados(<Control> ByVal ExibirAno As Nullable(Of AnoAcademico)) As IQueryable(Of Aluno)
        Dim db As EscolaContext = New EscolaContext()
        Dim consulta = db.Alunos.Include(Function(s) s.Matriculas.Select(Function(e) e.Curso))
        If Not ExibirAno Is Nothing Then
            consulta = consulta.Where(Function(s) s.Ano = ExibirAno)
        End If
        Return consulta
    End Function

Execute o projeto novamente e selecione valores diferentes no controle Dropdownlist que será exibido na página para testar a filtragem dos dados:

Dessa forma habilitamos a ordenação, paginação e filtragem dos dados pelo valor informado em um controle de forma bem simples e com pouco código usando o model binding.

No próximo tutorial vamos incrementar a interface com o usuário pela interação com jQuery com dynamic data template.

Pegue o projeto complete até este nível aqui: Escola_Macoratti_Ordenacao.zip

Referências:


José Carlos Macoratti