Na segunda parte desta série de artigos, 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.
Neste artigo, veremos como ordenar, paginar e filtrar dados com model binding e web forms.
Essas 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 artigo: Escola_Macoratti
Neste artigo, você vai aprender a:
- habilitar a ordenação e paginação dos dados
- habilitar o filtro dos dados com base em uma seleção do usuário
Recursos usados neste artigo:
- Microsoft Visual Studio 2012 ou Microsoft Visual Studio Express 2012 for Web
- Banco de dados SQL Server 2008 Express
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:
- Abra o arquivo Alunos.aspx no modo Design e selecione o controle GridView;
- A seguir, pressione F4 e na janela de Propriedades localize a propriedade AllowSorting, definindo o seu valor como True.
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 cliquei 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.
- Abra o arquivo Alunos.aspx no modo Design e selecione o controle GridView;
- Pressione F4 e na janela de Propriedades localize a propriedade AllowSorting definindo o seu valor como True;
- Defina a propriedade PageSize como valor 5.
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 cinco 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 em vez 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:
- Control
- Cookie
- Form
- Profile
- QueryString
- RouteData
- Session
- UserProfile
- VIewState
Neste artigo, vamos usar os valores dos controles para filtrar quais registros serão exibidos no GridView. Vamos incluir o atributo Control no método da consulta que foi criada anteriormente. Posteriormente, iremos aplicar o atributo QueryString ao 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, Incluir um atributo Control antes de um parâmetro especifica que o valor para esse 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, a paginação e a 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 artigo, 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