Usuário com melhor resposta
Erro de AllowPaging e AllowSorting na grid

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.
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-c7b6be6941c5Vitor 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
-
Você chegou a implementar o evento PageIndexChanging ?
http://msdn.microsoft.com/pt-br/library/system.web.ui.webcontrols.gridview.pageindexchanging.aspxVitor 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
-
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
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-c7b6be6941c5Vitor 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
-
-
Você chegou a implementar o evento PageIndexChanging ?
http://msdn.microsoft.com/pt-br/library/system.web.ui.webcontrols.gridview.pageindexchanging.aspxVitor 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
-
-
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