Este proyecto es para realizar paginación de un DataGridView, esto es útil si tenemos una cantidad grande de datos y queremos que nuestra pantalla muestre solo una cantidad determinada de filas.
En nuestra tabla necesitamos un campo int identity que nos servirá para definir un limite de filas a mostrar en nuestro procedimiento almacenado.
create database BDPaginacion go use BDPaginacion go create table clientes ( nro int identity, codigo varchar(5), nombre varchar(50), cargo varchar(50) );
En este procedimiento tuve que crear 2 tablas, una tabla será para que cuente el total de filas (La cantidad de registros o datos que hay en nuestra tabla clientes) y la otra tabla para mostrar una determinada cantidad de filas de acuerdo a los parámetros @tab_inicio y @tab_final
create proc sp_listar_clientes @tab_inicio int, @tab_final int as declare @tablita_clientes table ( nro1 int, codigo1 varchar(5), nombre1 varchar(50), cargo1 varchar(50) ) insert into @tablita_clientes ( nro1,codigo1,nombre1,cargo1 ) select ROW_NUMBER() over(order by nro asc)NRO,codigo,nombre,cargo from clientes select count(*) as cantidad from @tablita_clientes select * from @tablita_clientes where nro1 between @tab_inicio and @tab_final go exec sp_listar_clientes
Capa entidad
Nuestro procedimiento tiene 2 parámetros entonces debemos de crear 2 propiedades publicas con el mismo tipo de dato.
namespace Capa_Entidad { public class Class_Entidad { public int VarDatoInicio { get; set; } public int VarDatoFinal { get; set; } } }
Capa datos
Hacer la referencia a la capa entidad, System.Configuration, Data, Data.SqlClient, realizamos la conexión con el SQL y hacemos uso del procedimiento almacenado.
using System.Data; using System.Data.SqlClient; using System.Configuration; using Capa_Entidad; namespace Capa_Datos { public class Class_Datos { SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["sql"].ConnectionString); public DataSet Listar_clientes(Class_Entidad obje) { SqlCommand cmd = new SqlCommand("sp_listar_clientes",cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@tab_inicio",obje.VarDatoInicio); cmd.Parameters.AddWithValue("@tab_final",obje.VarDatoFinal); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet dt = new DataSet(); da.Fill(dt); return dt; } } }
Capa negocio
Referencia a la capa datos e invocamos a la función anteriormente creada.
using System.Data; using Capa_Datos; using Capa_Entidad; namespace Capa_Negocios { public class Class_Negocios { Class_Datos objd = new Class_Datos(); public DataSet N_listar_clientes(Class_Entidad obje) { return objd.Listar_clientes(obje); } } }
Formulario principal
Recuerda 👀 referencia a la capa entidad y negocio, obje representará a la clase de la capa entidad y objn a la clase de la capa negocios, puedes modificar el total de filas a mostrar cambiando el número en la variable TotalFilasAMostrar.
using Capa_Entidad; using Capa_Negocios; namespace WindowsFormsApp1 { public partial class Form1 : Form { Class_Entidad obje = new Class_Entidad(); Class_Negocios objn = new Class_Negocios(); DataSet dstabla; int VarPagInicio = 1;int VarPagIndice = 0;int TotalFilasAMostrar = 6; int VarPagFinal; void Mostrar_datos() { obje.VarDatoInicio = VarPagInicio; obje.VarDatoFinal = VarPagFinal; dstabla = objn.N_listar_clientes(obje); dataGridView1.DataSource = dstabla.Tables[1]; txtcantidadtotal.Text = dstabla.Tables[0].Rows[0][0].ToString(); int cantidad = Convert.ToInt32(dstabla.Tables[0].Rows[0][0].ToString()) / TotalFilasAMostrar; comboBox1.Items.Clear(); if (Convert.ToInt32(dstabla.Tables[0].Rows[0][0].ToString()) % TotalFilasAMostrar > 0) { cantidad += 1; } textBox2.Text = cantidad.ToString(); comboBox1.Items.Clear(); for (int x = 1; x <= cantidad; x++) { comboBox1.Items.Add(x.ToString()); } comboBox1.SelectedIndex = VarPagIndice; } public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { VarPagFinal = TotalFilasAMostrar; Mostrar_datos(); } private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e) { int pagina = Convert.ToInt32(comboBox1.Text); VarPagIndice = pagina - 1; VarPagInicio = (pagina - 1) * TotalFilasAMostrar + 1; VarPagFinal = pagina * TotalFilasAMostrar; Mostrar_datos(); } } }
App config
También no te olvides de modificar el app config para que se conecte sin problemas a tu base de datos.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> <connectionStrings> <add name="sql" connectionString="server=localhost\SQLEXPRESS;integrated security=true;database=BDPaginacion"/> </connectionStrings> </configuration>
😅 Solo comente algunas partes importantes del código para tener en cuenta, pero si quieres una explicación más exacta puedes ver el vídeo que hice.😀
- Visual Studio 2019
- Microsoft SQL Server Management Studio 18