none
Erro de AllowPaging e AllowSorting na grid RRS feed

  • Pergunta

  • Tenho o seguinte código:

    namespace CablewareProjetos
    {
        public partial class WebForm1 : System.Web.UI.Page
        {

            private SqlDataReader RetornaDados(string sQuery)
            {
                SqlDataReader drRetorno = null;

                SqlConnection oCon = new SqlConnection(ConfigurationManager.ConnectionStrings["strConn01"].ToString());
                SqlCommand oComando = new SqlCommand(sQuery, oCon);

                oComando.Connection.Open(); //Abrindo a conexão com o banco de dados
                drRetorno = oComando.ExecuteReader(); //Executando o comando e atribuindo os dados ao DataReader de retorno

                //Destruindo objetos que não serão mais usados
                oComando.Dispose();

                return drRetorno;
            }

            protected void Page_Load(object sender, EventArgs e)
            {
                SqlDataReader drReader = RetornaDados("SELECT * FROM modulo");
                gdvTeste.DataSource = drReader;
                gdvTeste.DataBind();
             }
        }
    }

    E preciso colocar a grid com a propriedade de paginação e de Sorting e da o seguinte erro:"The data source does not support server-side data paging."

    Pesquisei no Google e descobri que não da usar um objeto IQueryable para vincular dados a um GridView e ainda usar paginação e classificação.

    Mas ainda não sei como resolver esse problema, sem usar o SqlDataSource.

    quarta-feira, 13 de março de 2013 14:40

Respostas

  • Beatriz,

    Tente carregar seu dados em um DataTable, o DataReader é apenas leitura, sempre para frente, para este tipo de operação (paginação) o GridView não suporta nada que implemente a interface IDataReader:

    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
    
        dt.Load(RetornaDados("SELECT * FROM modulo"));
    
        gdvTeste.DataSource = dt;
        gdvTeste.DataBind();
    }

    http://social.msdn.microsoft.com/Forums/en-US/504/thread/59ca7c91-efa2-4cdc-af0d-c7b6be6941c5

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Beatriz_RF quinta-feira, 14 de março de 2013 15:14
    quarta-feira, 13 de março de 2013 14:48
  • Você chegou a implementar o evento PageIndexChanging ?

    http://msdn.microsoft.com/pt-br/library/system.web.ui.webcontrols.gridview.pageindexchanging.aspx

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Beatriz_RF quinta-feira, 14 de março de 2013 15:14
    quarta-feira, 13 de março de 2013 18:10
  • Beatriz,

    É bem simples, veja:

    .aspx:

    <asp:GridView ID="gdvTeste" runat="server" AllowPaging="true" OnPageIndexChanging="gdvTeste_PageIndexChanging" /> 

    .cs
    namespace CablewareProjetos
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
    
            private SqlDataReader RetornaDados(string sQuery)
            {
                SqlDataReader drRetorno = null;
    
                SqlConnection oCon = new SqlConnection(ConfigurationManager.ConnectionStrings["strConn01"].ToString());
                SqlCommand oComando = new SqlCommand(sQuery, oCon);
    
                oComando.Connection.Open(); //Abrindo a conexão com o banco de dados
                drRetorno = oComando.ExecuteReader(); //Executando o comando e atribuindo os dados ao DataReader de retorno
    
                //Destruindo objetos que não serão mais usados
                oComando.Dispose();
    
                return drRetorno;
            }
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    DataTable dt = new DataTable();
    
                    dt.Load(RetornaDados("SELECT * FROM modulo"));
    
                    gdvTeste.DataSource = dt;
                    gdvTeste.DataBind(); 
                }
            }
    
            protected void gdvTeste_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                DataTable dt = new DataTable();
    
                dt.Load(RetornaDados("SELECT * FROM modulo"));
    
                gdvTeste.DataSource = dt;
                gdvTeste.PageIndex = e.NewPageIndex;
                grdView.DataBind();
            }
        }
    }


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Beatriz_RF quinta-feira, 14 de março de 2013 15:14
    quinta-feira, 14 de março de 2013 13:05

Todas as Respostas

  • Beatriz,

    Tente carregar seu dados em um DataTable, o DataReader é apenas leitura, sempre para frente, para este tipo de operação (paginação) o GridView não suporta nada que implemente a interface IDataReader:

    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
    
        dt.Load(RetornaDados("SELECT * FROM modulo"));
    
        gdvTeste.DataSource = dt;
        gdvTeste.DataBind();
    }

    http://social.msdn.microsoft.com/Forums/en-US/504/thread/59ca7c91-efa2-4cdc-af0d-c7b6be6941c5

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Beatriz_RF quinta-feira, 14 de março de 2013 15:14
    quarta-feira, 13 de março de 2013 14:48
  • Vitor 

    Não deu erro e até apareceu os números das paginas mas não funcionou!

    quarta-feira, 13 de março de 2013 18:00
  • Você chegou a implementar o evento PageIndexChanging ?

    http://msdn.microsoft.com/pt-br/library/system.web.ui.webcontrols.gridview.pageindexchanging.aspx

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Beatriz_RF quinta-feira, 14 de março de 2013 15:14
    quarta-feira, 13 de março de 2013 18:10
  • Vitor sou iniciante e não sei o que devo por no evento PageIndexChanging!
    quinta-feira, 14 de março de 2013 11:48
  • Beatriz,

    É bem simples, veja:

    .aspx:

    <asp:GridView ID="gdvTeste" runat="server" AllowPaging="true" OnPageIndexChanging="gdvTeste_PageIndexChanging" /> 

    .cs
    namespace CablewareProjetos
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
    
            private SqlDataReader RetornaDados(string sQuery)
            {
                SqlDataReader drRetorno = null;
    
                SqlConnection oCon = new SqlConnection(ConfigurationManager.ConnectionStrings["strConn01"].ToString());
                SqlCommand oComando = new SqlCommand(sQuery, oCon);
    
                oComando.Connection.Open(); //Abrindo a conexão com o banco de dados
                drRetorno = oComando.ExecuteReader(); //Executando o comando e atribuindo os dados ao DataReader de retorno
    
                //Destruindo objetos que não serão mais usados
                oComando.Dispose();
    
                return drRetorno;
            }
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    DataTable dt = new DataTable();
    
                    dt.Load(RetornaDados("SELECT * FROM modulo"));
    
                    gdvTeste.DataSource = dt;
                    gdvTeste.DataBind(); 
                }
            }
    
            protected void gdvTeste_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                DataTable dt = new DataTable();
    
                dt.Load(RetornaDados("SELECT * FROM modulo"));
    
                gdvTeste.DataSource = dt;
                gdvTeste.PageIndex = e.NewPageIndex;
                grdView.DataBind();
            }
        }
    }


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Beatriz_RF quinta-feira, 14 de março de 2013 15:14
    quinta-feira, 14 de março de 2013 13:05