[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.