[WinForms – How To] Paginación del DataGridView

[WinForms – How To] Paginación del DataGridView

Una grilla de datos nos ofrece una alternativa muy cómoda a la hora de mostrar datos. La funcionalidad común nos exige que la grilla vaya hasta abajo cuando se tienen múltiples registros, pero en ocasiones queremos mostrar cierta cantidad de registros y esta funcionalidad no se encuentra presente de manera estándar.

Reutilizando el mismo ejemplo de la importación de Excel a un DataGridView agregaremos la paginación a éste.
Básicamente agregamos 4 botones (Primero, anterior, siguiente, Último): Paginacion1

Luego agregamos un método que cargará los datos paginados:

private void button1_Click(object sender, EventArgs e)
{
//Obtenemos el archivo desde la ubicación actual
var executableFolderPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

//Hoja desde donde obtendremos los datos
string hoja = "Hoja1";

//Cadena de conexión
string conexion = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + executableFolderPath +
"\Registros.xlsx" +
";Extended Properties='Excel 8.0;HDR=YES;';";

OleDbConnection con = new OleDbConnection(conexion);
//Consulta contra la hoja de Excel
OleDbCommand cmd = new OleDbCommand("Select * From [" + hoja + "$]", con);
try
{
//Conectarse al archivo de Excel
con.Open();

sda = new OleDbDataAdapter(cmd);

//Cargar todos los datos
sda.Fill(data);
total = data.Tables[0].Rows.Count;
data.Clear();

//Realizar la primera paginación
sda.Fill(data, indice, 5, "Table");

//Cargar la grilla
dataGridView1.DataSource = data.Tables[0];
}
catch
{
//Error leyendo excel
MessageBox.Show("Ocurrió un error en la lectura del archivo");
}
finally
{
//Funcione o no, cerramos la cadena de conexión
con.Close();
}
}

Para cada botón, se llama al método correspondiente y se pasa como parámetro los índices necesarios:

private void primero_Click(object sender, EventArgs e)
{
indice = 0;
data.Clear();
sda.Fill(data, indice, 5, data.Tables[0].TableName);
}

private void anterior_Click(object sender, EventArgs e)
{
indice -= 5;
if (indice < 0)
indice = 0;

data.Clear();
sda.Fill(data, indice, 5, "Table");
}

private void siguiente_Click(object sender, EventArgs e)
{
indice += 5;

if (indice <= total)
{
data.Clear();
sda.Fill(data, indice, 5, "Table");
}
else
indice -= 5;
}

private void ultimo_Click(object sender, EventArgs e)
{
indice = total -1;
data.Clear();
sda.Fill(data, indice, 5, "Table");
}

Nuestra grilla quedaría de la siguiente manera: Paginacion2

De esta manera hemos aplicado la paginación a la grilla en el formulario Windows.

Deja un comentario

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.