Usuário com melhor resposta
Paginação + Ordenação com LINQ + MVC

Pergunta
-
Bom dia a todos, preciso fazer uma paginação com ordenação, sendo que não posso usar javascript, tablesort. Tenho muitos registros por isso preciso usar uma sintaxe semelhante a
db.Tabela.Skip(10).Take(50).Orderby("Sorter");
Sendo que a expressão a cima está errada. Queria fazer algo semelhante. Alguem pode me dar uma luz, algum exemplo, alguem já fez isso?Desde já obrigado.
Respostas
-
Opa. cara você já tentou usar o MvcContrib? Ele já tem a paginação pronta e até gera os grid dinamicamente... moleza demais... tenta lá...
Segue uns exemplos da sua implementação:
O nameSpace é: MvcContrib.Pagination;
[Transaction] public ActionResult Index(int? page) { var filtro = Request.Form["txtFiltro"]; return !string.IsNullOrEmpty(filtro) ? View(_empresaRepository.FiltrarEmpresas(filtro).AsPagination(1, 999)) : View(_empresaRepository.GetAll().AsPagination(page ?? 1, 10)); }
ai na View você usa algo como:
<%@ Import Namespace="MvcContrib.Pagination" %> <%= Html.Grid(Model).Columns(column => { column.For(x => x.CodigoErp).Named("Cód. ERP"); column.For(x => x.Nome).Named("Nome"); column.For(x => x.Cnpj); column.For(x => Html.ActionLink<EmpresasController>(c => c.Show(x.Id), "Detalhar")).Named("Detalhe").DoNotEncode(); column.For(x => Html.ActionLink<EmpresasController>(c => c.Edit(x.Id), "Editar")).Named("Edição").DoNotEncode(); column.For(x => Html.ActionLink<EmpresasController>(c => c.Delete(x.Id), "Excluir", new { onclick = "return confirm('Você tem certeza ?');" })).Named("Exclusão").DoNotEncode(); }) .Empty("Não há registros gravados.") .Attributes(id => "tableGrid", cellpadding => 0) %> <br /> <div id="pnlNavegador" class="tblnavegador"> <%= Html.Pager(Model).Format("<b>Mostrando {0} de {1} arquivo(s)</b> - ").SingleFormat("<b>Mostrando {0} de {1} arquivo(s)</b> - ").Previous("Anterior ").First("Primeiro").Next("Próximo").Last("Último")%> </div>
Muito prático, depois que vc entende como ele funciona, te dá uma produtividade incrível... Vale a pena, ok?
Link para download: http://mvccontrib.codeplex.com/
Aproveitando, você já conhece o S#arp Architecture? Então dê uma olhada e resolva seus problemas com o MVC: http://www.sharparchitecture.net/
[]'s
Daniel maurílio Moreira
- Marcado como Resposta André Borges MedeirosModerator quarta-feira, 6 de abril de 2011 17:46
Todas as Respostas
-
-
-
-
Fala Anderson, obrigado pela ajuda, mas ainda não é isso que eu quero.
Eu sei como se faz um select no linq, o que eu não sei é como fazer paginação e ordenação sem jquery.
É o seguinte, vamos supor que eu tenho uma tabela com 10 mil regitros, eu não posso chamar tudo isso em uma pagina de uma só vez né, então preciso paginar.
Para pagina tenho que levar em conta que estou usando LinqToSql e MVC o que dificulta um pouco a paginação e ordenação.
Paginar é teoricamente facil com esse codigo:
db.Tabelas.OrderBy(x => "Nome do campo de ordenação passado por parametro").Skip(0).Take(100).ToList();
Então, estou paginando 100 registros por página, sendo que preciso saber qual ordenação passar e também se é OrderBy() ou OrderByDescending().
Bem é isso, espero que tenham entendido.
Obrigado a todos!
-
-
Opa. cara você já tentou usar o MvcContrib? Ele já tem a paginação pronta e até gera os grid dinamicamente... moleza demais... tenta lá...
Segue uns exemplos da sua implementação:
O nameSpace é: MvcContrib.Pagination;
[Transaction] public ActionResult Index(int? page) { var filtro = Request.Form["txtFiltro"]; return !string.IsNullOrEmpty(filtro) ? View(_empresaRepository.FiltrarEmpresas(filtro).AsPagination(1, 999)) : View(_empresaRepository.GetAll().AsPagination(page ?? 1, 10)); }
ai na View você usa algo como:
<%@ Import Namespace="MvcContrib.Pagination" %> <%= Html.Grid(Model).Columns(column => { column.For(x => x.CodigoErp).Named("Cód. ERP"); column.For(x => x.Nome).Named("Nome"); column.For(x => x.Cnpj); column.For(x => Html.ActionLink<EmpresasController>(c => c.Show(x.Id), "Detalhar")).Named("Detalhe").DoNotEncode(); column.For(x => Html.ActionLink<EmpresasController>(c => c.Edit(x.Id), "Editar")).Named("Edição").DoNotEncode(); column.For(x => Html.ActionLink<EmpresasController>(c => c.Delete(x.Id), "Excluir", new { onclick = "return confirm('Você tem certeza ?');" })).Named("Exclusão").DoNotEncode(); }) .Empty("Não há registros gravados.") .Attributes(id => "tableGrid", cellpadding => 0) %> <br /> <div id="pnlNavegador" class="tblnavegador"> <%= Html.Pager(Model).Format("<b>Mostrando {0} de {1} arquivo(s)</b> - ").SingleFormat("<b>Mostrando {0} de {1} arquivo(s)</b> - ").Previous("Anterior ").First("Primeiro").Next("Próximo").Last("Último")%> </div>
Muito prático, depois que vc entende como ele funciona, te dá uma produtividade incrível... Vale a pena, ok?
Link para download: http://mvccontrib.codeplex.com/
Aproveitando, você já conhece o S#arp Architecture? Então dê uma olhada e resolva seus problemas com o MVC: http://www.sharparchitecture.net/
[]'s
Daniel maurílio Moreira
- Marcado como Resposta André Borges MedeirosModerator quarta-feira, 6 de abril de 2011 17:46