Para poder paginar un gridView cuyo contenido lo tenemos en una consulta SQL y ejecutada sobre un DataReader debemos de utilizar un componente compatible con IEnumerable. Por tanto directamente no es posible. Debemos usar otro objeto como por ejemplo un DataTable. Veamoslo:
private void cargarDatos(){
...
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
string vConsulta = "SELECT ...."
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
GridView1.DataSource = rdr;
GridView1.DataBind();
}
...
}
Este código es perfectamente válido para mostrar los resultados en el GridView.
Pero supongamos que quisieramos paginar el contenido del GridView1. Para ello debemos definir la popiedad del gridView AllowPaging = true y definir su metodo pageIndexChanging
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView gv = (GridView)sender;
gv.PageIndex = e.NewPageIndex;
cargarDatos();
}
Para que funcione la paginacion deberiamos cambiar la asignacion:
GridView1.DataSource = rdr;
por esta otra
DataTable dt = new DataTable();
dt.Load(rdr);
GridView1.DataSource = dt;
Datatable implementa IEnumerable y permite la paginacion correctamente