miércoles, 27 de agosto de 2014

Permitir paginacion en un GridView usando DataReader

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


No hay comentarios:

Publicar un comentario

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...