PAGINACIÓN EN UN DATAGRIDVIEW EN C# VISUAL STUDIO 2019



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.

Base de datos y procedimiento almacenado

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



  • Nombre          : PaginacionDataGridView.rar
  • Tamaño          : 104 KB