[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):

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:
De esta manera hemos aplicado la paginación a la grilla en el formulario Windows.

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.


