Cuando traemos listas de datos de una base de datos, en ocasiones obtenemos cientos de registros. Esto puede complicar las cosas a la hora de crear una interfaz. La paginación nos resuelve este problema, ayudándonos a gestionar el número de campos que se recuperan por consulta, y facilitando la visualización de los datos.

Debemos añadir los nuggets de EntityFrameworkCore y EntityFramework.SqlServer, estos nuggets nos permiten usar Linq y nos facilitan el trabajo a la hora de atacar a la bbdd.

Dentro de la carpeta Models, Creamos los Modelos de Jugador y de VistaJugador y los mapeamos acorde a nuestra bbdd (para paginar solo necesitamos VistaJugador, Jugador es un ejemplo para enseñar el resultado si no hiciésemos paginación).

Tabla jugadores en la BBDD(SqlServer).

Modelo Jugador.

Modelo Vista Jugador.

Utilizando SqlServer, creamos la ViewJugadores, que contiene todos los campos de la tabla jugadores además de un campo posición. Este campo representa la fila de la consulta en la que se encuentra el registro. Una vez tenemos la View, creamos la procedure la cual tiene @posicion como parámetro. Usando where filtramos registros de posición a posición + x (en este caso x=20), este número indica el número de campos que recuperaremos).

Ahora creamos sobre el proyecto las carpetas Repositories y Data. Dentro de repositories crearemos la clase RepositoryTorneos y dentro de data crearemos la clase TorneosContext.

En torneos context, usando EntityFramework creamos los DbSet usando nuestros modelos creados previamente, esto nos permite trabajar con Linq.

Dentro del repositorio creamos los métodos que obtendrán los datos de nuestra base de datos. Para ello tenemos que implementar nuestro DbContext. Para este proyecto he creado un GetVistaJugadores (devuelve jugadores paginados usando una procedure), GetJugadores (devuelve todos los jugadores guardados) y GetNJugadores (devuelve el número de jugadores guardados, será necesario para paginar).

Dentro del controller tenemos que cargar el repository para poder usar sus métodos.

Dentro del controller creamos los IActionResult. En el primero he incluido el parámetro posición, que será el que usemos para la paginación, además unos ViewData que nos ayudaran con los menús de paginación. Pasamos las listas de jugadores a las Views usando Model.

Usamos scaffolding de Visual Studio para crear la View, seleccionamos la opción List y usamos el modelo que queramos visualizar, en este caso VistaJugadores para la paginación.

Dentro de nuestra View añadimos el menú que nos permitirá navegar por los registros, en este menú usamos los valores que hemos pasado por ViewData del controlador, estos valores son pasados de vuelta al controlador, lo que nos devolverá la página con la nueva posición y nuevos valores de siguiente y anterior.

Debemos añadir a Startup.cs las dependencias de nuestro repository y del DbContext, además de añadir la cadena de conexión que hemos introducido en appsettings.json

Añadimos los links a nuestras Views en el Layout.

Y este sería el resultado final, el menú de paginación se puede hacer de distintas formas,  esto es un ejemplo.

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.