Desenvolvi uma solução que está atendendo muito bem as necessidades dos projetos que tenho trabalhado e espero que possa ajudar algum de vocês também.
Toda a documentação de como usar este componente em seu projeto, poder encontrado aqui. O intuito deste poste é mostra apenas inclusão de uma lista para selecionar a quantidade de itens que deverá ser exibida pelo componente.
Após você incorporar o Grid.Mvc em seu projeto é hora de criamos nossa estrutura.
Primeiro devemos criar um classe que irá interceptar as execuções das Actions que contenham dados para GridMvc, isso se dará em forma de anotação, veja:
public class GridMvcAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var controller = (Controller)filterContext.Controller;
var rd = filterContext.RouteData;
var request = filterContext.HttpContext.Request;
var model = controller.ViewData.Model as IQueryable
Crie também uma classe que conterá a estrutura de filtros, como segue:
public class GridMvcFilter
{
public const int DefaultPagesize = 10;
public string Id { get; set; }
public string Controller { get; set; }
public string Action { get; set; }
public string GridOrd { get; set; }
public string CurrentFilter { get; set; }
public string GridFilter { get; set; }
public int? GridPage { get; set; }
public int? GridPageSize { get; set; }
}
Agora faremos uma pequena alteração no arquivo "_GridPager.cshtml", este arquivo é responsável por renderizar o conteúdo de rodapé do grid.
Acrescente este trecho de código, com isso será possível resgatar a lista de páginas gerada pela classe de anotação criada acima.
@{
var itemsPerPageList = (IEnumerable)ViewBag.ListDropDown;
}
No final do aquivo acrescente o código que irá renderizar a lista, fique a vontade para estilizar.
@if (Model.ItemsCount > 0)
{
Página @Model.CurrentPage de @Model.PageCount
- Exibindo até @Html.DropDownList("grid-page-size", itemsPerPageList, new { @onchange = "location = this.value" }) de @Model.ItemsCount Registros
}
Por a ativação da anotação em uma Action que deve renderizar um Grid.
[GridMvcAttribute]
public ActionResult Index()
{
var carList = new List();
for (int i = 1; i <= 50; i++)
{
carList.Add(new Car { Id = i, Model = "Model 0" + i, Year = 2010 + i });
}
return View(carList.AsQueryable().OrderBy(a=>a.Model));
}
Por último devemos informar ao grid que desejamos utilizar paginação e a quantidade de itens na páginas que desejamos ver.
@Html.Grid(Model).Columns(col =>
{
col.Add(c => c.Id).Titled("Id").Filterable(true);
col.Add(c => c.Model).Titled("Model");
col.Add(c => c.Year).Titled("Year");
}).WithPaging((int)ViewBag.ItemsPerPage).Sortable(true).Filterable(true).WithMultipleFilters()
Atente para o método "WithPaging", nele passamos como parâmetro a variável que foi configurada no na classe GridMvcAttribute.
Todo o projeto é possível encontrar no meu github.
Nenhum comentário:
Postar um comentário