none
Paginação + Ordenação com LINQ + MVC RRS feed

  • 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.

    quarta-feira, 14 de abril de 2010 13:19

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&oacute;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&ccedil;&atilde;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&atilde;o h&aacute; 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&oacute;ximo").Last("&Uacute;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

     

    quinta-feira, 22 de abril de 2010 17:21

Todas as Respostas

  • Fala yslladd,

    Tenta assim: db.Tabela.Orderby("Sorter").Skip(10).Take(50);

     


    Forte abraço,

    André Borges Medeiros
    MCT, MCPD, MCTS

    >> Se a resposta solucionar sua dúvida, favor Votar como Útil
    quinta-feira, 15 de abril de 2010 17:07
    Moderador
  • Então André, não funcionou não.

     

    A minha ideia é passar uma expressão de ordem para dentro do orderby.

     

    Você já viu algo parecido?

     

    Obrigado pela ajuda, abraço.

    quinta-feira, 15 de abril de 2010 18:03
  • Não testei, mas veja se isso funciona:

     

    db.Tabela.Skip(10).Take(50)..OrderBy(c => c.suacoluna)

    sexta-feira, 16 de abril de 2010 12:22
  • 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!

    sexta-feira, 16 de abril de 2010 20:13
  • Acho que entendi =)

     

    Da uma olhada nesses dois links:

     

    http://www.macoratti.net/08/01/aspn_lqp.htm

     

    http://imasters.uol.com.br/artigo/10957/csharp/linq_to_sql_dicas_para_otimizacao_do_desempenho/ (Item 7)

     

    Espero ter ajudado dessa vez =)

    segunda-feira, 19 de abril de 2010 14:52
  • 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&oacute;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&ccedil;&atilde;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&atilde;o h&aacute; 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&oacute;ximo").Last("&Uacute;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

     

    quinta-feira, 22 de abril de 2010 17:21