none
Problema com paginação com GridView RRS feed

  • Discussão Geral

  • Olá Pessoal, boa tarde, estou com um probleminha com meu GridView, tenho um GridView carregando os dados da minha base de dados através de um SqlDataSource ai habilitei a paginação do grid e defini a quantidade de registros = 5, até ai tudo bem, o que acontece, é que vem da minha base 50 registros por exemplo, mas na tela mostra apenas os 5 primeiros, e na paginação informa que tenho 10 páginas, até ai tudo certo, o problema é que eu tenho uma coluna no meu GridView template que tem dentro dela um componente CheckBox. Ai cada registro que vem do banco é acompanhado por um CheckBox para que o usuário clique nele e deixe marcado, só que quando é trocado de página, o que foi selecionado na página anterior é desmacardo !

    Gostaria de que tudo o que o usuário selecionasse no grid independentemente se trocar de página, fique marcado !

    Aguardo uma ajuda pessoal !

    Desde ja obrigado !
    Att Anderson Magri


    anderson magri

    terça-feira, 17 de julho de 2012 18:08

Todas as Respostas

  • Anderson assim do nada clicando apenas na paginação a não ser que vc controle a paginação e nela vc percorrar seu gridview e veja quais itens estão marcados e flag isso no banco ai se vc marcar na página anterior ele vai montar a grid e verá os itens flegados e vai marca-los, assim do nada como vc mencionou não tem como, pq cada paginação ele vai no banco e carrega seu grid, se vc marcou algo, marcou o que está em memória qdo vc volta para a página ele vai no banco e carrega os dados vc marcou algo no banco para informar que o item foi selecionado ? ou então vc criar um DataTable e nele vc marca os itens selecionados e carrega seu grid a partir do DataTable, bem em resumo vc tem que selecionar de alguma forma o item para que vc possa navegar na gridview e ele te mostre os itens selecionados.

    Junior

    terça-feira, 17 de julho de 2012 19:01
  • Ok, Junior, eu entendi, então cada vez que o usuário trocar de página eu armazeno em memória o que ele selecionou, e quando voltar naquela página eu mostro o que ele selecionou é isso ? Eu não marco nada no banco mostrando que foi selecionado, esse grid é para mim gerar um relatório baseado nos registros escolhidos no gridview, entendeu. Ai para cada registro marcado com o checkBox, eu envio para o meu relatorio como parametro.

    Att Anderson Magri


    anderson magri

    terça-feira, 17 de julho de 2012 19:15
  • Não é isso vc não entendeu, o gridview a cada paginação ele monta os registros a partir do banco se vc marcou algo em "memória" qdo ele repaginar os dados veem do banco e eles estão marcados informando que foram selecionados, claro que vc pq vc não os marcou, Anderson entenda que vc tem de alguma forma "dizer" que o item foi marcado o gridview é um componente que mostra dados vindo de um banco o que vc pode fazer é ter um botão por exemplo que qdo clicado vc percorre o gridview e grava no banco em uma coluna que o item foi selecionado ou tem umm DataTable que vc cria a partir dos dados do gridview e nele vc marca, mais vc tem que ter um dispositivo ou banco para mostrar isso em memória não se tem isso, até pq em webforms trabalhamos com dados desconectados. 

    Anderson embora visualmente não fique elegante mais seria mais prático vc nao paginar esse gridview pq a cada paginação vc percorre o gridview vai no banco e marca os itens selecionados, em webforms temos que ver a performance, seria ideal vc fazer isso somente uma vez. Nao paginando o gridview, assim vc so faz isso uma vez, já imaginou se vc tiver 100 páginas, vc percorrerá o gridview 100 vezes vai no banco 100 vezes veja a performance como vai ficar.

    Lembre-se que site lento e um site que o usuário não quer mais acessar.


    Junior

    terça-feira, 17 de julho de 2012 19:44
  • Junior, eu entendi sim o que você disse, isso eu ja sabia, cada vez que o grid é mostrado, é executado no banco uma consulta trazendo a quantidade de dados que eu defini, como eu defini 5 itens por página cada consulta será feita trazendo somente 5 itens por vez, isso ja é feito no aspnet para otimizar a consulta ao banco de dados, não tem como eu trazer tudo sem páginar, irá ficar muito feio, pois tenho uma tabela com muitos dados e além do mais a performance irá cair pois irá trazer tudo o que tenho de uma só vez, ao contrário do que a paginação faz, que é buscar no banco apenas a quantidade de registros definida por página. O que acontece hoje é o seguinte, cada vez que o usuário seleciona um checkBox no gridview eu faço:


    String registros = new String();
    Registro += codDoItemSelecionado + ";";

    Ai eu tenho uma string gigante com os códigos que eu preciso, isso é sem problemas, ja testei e funciona perfeitamente, só que por questão de estética e para não confundir o meu usuário eu queria que fosse marcado os que ele ja escolheu, sei que o gridview busca dados do banco de dados e se eu não informar ao banco se está selecionado ou não fica complicado de mostrar no gridview isso, mas é que eu queria achar um jeito de fazer isso sem perder performance.

    Obrigado pela ajuda cara !

    Um abraço
    Att Anderson Magri


    anderson magri

    terça-feira, 17 de julho de 2012 19:57
  • Anderson tenho algo parecido com o que vc quer, tenho uma gridview onde trago todos os funcionários cadastrados e permito que o usuário altere ou não um campo qtde e não pagino e funciona perfeito. Só vou no banco uma vez para carregar o gridview tenho um botão atualizar fora da gridview onde no evento click dele percorro o gridview e gravo na tabela os registros.

    Junior

    quarta-feira, 18 de julho de 2012 12:25
  • Luiz, para o seu caso resolve, mas imagina uma gridview com mil linhas ?
    Não tem como né, se não paginar fica ridículo, e a performance vai la embaixo !

    Obrigado pela ajuda !

    Att Anderson Magri


    anderson magri

    quarta-feira, 18 de julho de 2012 15:45
  • Dê uma olhada nos artigos abaixo, podem te ajudar.

    http://ecode10.com/artigo/11/Exemplo+do+livro+Programando+em+C+para+Web.aspx

    http://ecode10.com/artigo/29/Tudo+Sobre+DataGrid+(ASP.NET+e+C).aspx

    http://ecode10.com/artigo/741/adicionando+menu+no+datagridview.aspx


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.ecode10.com

    quinta-feira, 19 de julho de 2012 12:44