ProgrammaSubito.it
appunti su ASP.NET 2.0, C#
a cura di Carmine Pacifico
My Facebook

Sostieni ProgrammaSubito.it

GridView - Personalizzare la paginazione

Come personalizzare la paginazione di una GridView

GridView Custom Paging

In questo esempio viene mostrato come personalizzare la paginazione di una GridView così come dall'esempio seguente.

IDNomeCognome
1CarminePacifico
2MarioRossi
<< < > >>
1 [2] [3]
Pag /5


>>

File Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits ="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
  <title>ProgrammaSubito.it</title>
  <style type="text/css">
  .paginazioneNumPag a
  {
   text-decoration: none;
   font-size: 10px;
   font-family: Arial;
  }
  .paginazioneNumPag a:visited
  {
   text-decoration: none;
   font-size: 10px;
   font-family: Arial;
  }
  .paginazioneNumPag a:hover
  {
   font-size: 15px;
   font-family: Arial;
   font-weight: bold;
  }
  .paginazioneNumPag
  {
   font-size: 10px;
   font-family: Arial;
   text-decoration: none;
  }
  .paginazionePagSel
  {
   font-size: 10px;
   font-family: Arial;
   font-weight: bold;
   color: Black;
  }
  .testo
  {
   font-size: 10px;
   font-family: Arial;
   color: Black;
  }
  </style>
</head>
<body>
  <form id="form1" runat="server">
  <div>
   <asp:XmlDataSource
   runat="server"
   id="XmlDataSource1"
   XPath="List/Student"
   DataFile="~/Anagrafica.xml" />
   <asp:GridView
   runat="server"
   id="GridView1"
   DataSourceID="XmlDataSource1"
   AllowPaging="True"
   DataKeyNames="ID"
   PageSize="2"
   OnRowCreated="GridView1_RowCreated"
   Width="300px" />
  </div>
  </form>
</body>
</html>


File Default.aspx.cs

using System;
using System.Collections.Generic;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Collections;
using System.Drawing;

public partial class _Default : System.Web.UI.Page
{
 private Button btn = new Button();
 private TextBox tbPaginaScelta = new TextBox();

 protected void Page_Load(object sender, EventArgs e)
 {
 }

 protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
 {
  if (e.Row.RowType == DataControlRowType.Pager)
  {
   Int32 larghezzaContenitoriCella0 = 10;
   Int32 larghezzaCelleContenitori = 15;
   Int32 altezzaCella = 20;
   Int32 numTotPagine = GridView1.PageCount;
   Int32 paginaAttuale = GridView1.PageIndex;
   Int32 numPagineSelezionabili = 3;
   //Stabilisco il range delle pagine selezionabili
   Int32 range = ((Int32)(paginaAttuale / numPagineSelezionabili)); 
   Int32 startPage = range * numPagineSelezionabili;
   LinkButton PrimaLb = new LinkButton();
   PrimaLb.CommandName = "Page";
   PrimaLb.CommandArgument = "First";
   PrimaLb.ForeColor = System.Drawing.Color.Blue;
   PrimaLb.Text = "<<";
   PrimaLb.ToolTip = "Prima pagina";
   PrimaLb.Width = larghezzaContenitoriCella0;
   //se non sono sulla prima pagina mostro precedente e prima
   Label Prima = new Label();
   if (GridView1.PageIndex > 0)
   {
    PrimaLb.Enabled = true;
    Prima.CssClass = "paginazioneNumPag";
   }
   else
   {
    PrimaLb.Enabled = false;
    PrimaLb.CssClass = "paginazioneNumPag";                
   }
   Prima.Controls.Add(PrimaLb);

   LinkButton PrecedenteLb = new LinkButton();
   PrecedenteLb.CommandName = "Page";
   PrecedenteLb.CommandArgument = "Prev";
   PrecedenteLb.ForeColor = System.Drawing.Color.Blue;
   PrecedenteLb.Text = "<";
   PrecedenteLb.ToolTip = "Precedente";
   PrecedenteLb.Width = larghezzaContenitoriCella0;
   Label Precedente = new Label();
   if (GridView1.PageIndex > 0)
   {
    PrecedenteLb.Enabled = true;
    Precedente.CssClass = "paginazioneNumPag";
   }
   else
   {
    PrecedenteLb.Enabled = false;
    PrecedenteLb.CssClass = "paginazioneNumPag";
   }
   Precedente.Controls.Add(PrecedenteLb);

   LinkButton SuccessivoLb = new LinkButton();
   SuccessivoLb.CommandName = "Page";
   SuccessivoLb.CommandArgument = "Next";
   SuccessivoLb.ForeColor = System.Drawing.Color.Blue;
   SuccessivoLb.Text = ">";
   SuccessivoLb.ToolTip = "Successiva";
   SuccessivoLb.Width = larghezzaContenitoriCella0;
   Label Successivo = new Label();
   if ((GridView1.PageIndex + 1) < GridView1.PageCount)
   {
    SuccessivoLb.Enabled = true;
    Successivo.CssClass = "paginazioneNumPag";    
   }
   else
   {
    SuccessivoLb.Enabled = false;
    SuccessivoLb.CssClass = "paginazioneNumPag";
   }
   Successivo.Controls.Add(SuccessivoLb);

   LinkButton UltimaLb = new LinkButton();
   UltimaLb.CommandName = "Page";
   UltimaLb.CommandArgument = "Last";
   UltimaLb.ForeColor = System.Drawing.Color.Blue;
   UltimaLb.Text = ">>";
   UltimaLb.ToolTip = "Ultima pagina";
   UltimaLb.Width = larghezzaContenitoriCella0;
   Label Ultima = new Label();
   if ((GridView1.PageIndex + 1) < GridView1.PageCount)
   {
    UltimaLb.Enabled = true;
    Ultima.CssClass = "paginazioneNumPag";    
   }
   else
   {
    UltimaLb.Enabled = false;
    UltimaLb.CssClass = "paginazioneNumPag";
   }
   Ultima.Controls.Add(UltimaLb);

   //recupero la tabella del pager
   Table pager = e.Row.Cells[0].Controls[0] as Table;
   if (pager != null)
   {
    //La prima cella contiene i simboli (<< < > >>) 
    TableRow tableRowSimboli = new TableRow();

    TableCell cellSimboli0 = new TableCell();
    cellSimboli0.Controls.Add(Prima);
    cellSimboli0.Controls.Add(new LiteralControl(" "));
    tableRowSimboli.Cells.Add(cellSimboli0);

    TableCell cellSimboli1 = new TableCell();
    cellSimboli1.Controls.Add(Precedente);
    cellSimboli1.Controls.Add(new LiteralControl(" "));
    cellSimboli1.Controls.Add(new LiteralControl(" "));
    tableRowSimboli.Cells.Add(cellSimboli1);

    TableCell cellSimboli2 = new TableCell();
    cellSimboli2.Controls.Add(Successivo);
    cellSimboli2.Controls.Add(new LiteralControl(" "));
    tableRowSimboli.Cells.Add(cellSimboli2);

    TableCell cellSimboli3 = new TableCell();
    cellSimboli3.Controls.Add(Ultima);
    cellSimboli3.Controls.Add(new LiteralControl(" "));
    tableRowSimboli.Cells.Add(cellSimboli3);

    Table tableSimboli = new Table();
    tableSimboli.Rows.Add(tableRowSimboli);

    TableCell cell0 = new TableCell();
    cell0.VerticalAlign = VerticalAlign.Middle;
    cell0.BackColor = Color.White;
    cell0.Height = (Unit)altezzaCella;
    cell0.HorizontalAlign = HorizontalAlign.Center;
    cell0.Controls.Add(tableSimboli);
    cell0.Width = (Unit)50;

    //La seconda cella contiene i numeri CELL
    TableCell cell = new TableCell();
    cell.VerticalAlign = VerticalAlign.Middle;
    cell.BackColor = Color.White;
    cell.Height = (Unit)altezzaCella;
    cell.HorizontalAlign = HorizontalAlign.Center;
    Table tableNumeriPag = new Table();
    TableRow tableRowNumeriPag = new TableRow();
    for (int i = 1; i <= numPagineSelezionabili; i++)
    {
     TableCell tableCellNumeriPag = new TableCell();
     Int32 numPagina = startPage + i;
     if (numPagina != (GridView1.PageIndex + 1))
     {
      Label lblContenitore = new Label();
      lblContenitore.CssClass = "paginazioneNumPag";
      LinkButton bt = new LinkButton();
      bt.Text = "[" + numPagina + "] ";
      bt.CommandName = "Page";
      bt.CommandArgument = numPagina.ToString();
      lblContenitore.Controls.Add(bt);
      lblContenitore.Width = larghezzaCelleContenitori;
      tableCellNumeriPag.Controls.Add(lblContenitore);
     }
     else
     {
      Label lbl = new Label();
      lbl.Text = " " + numPagina + " ";
      lbl.CssClass = "paginazionePagSel";
      lbl.Width = larghezzaCelleContenitori;
      tableCellNumeriPag.Controls.Add(lbl);
     }
     tableRowNumeriPag.Cells.Add(tableCellNumeriPag);
     if (numPagina == numTotPagine)
     {
      break;
     }
    }
    tableNumeriPag.Rows.Add(tableRowNumeriPag);
    cell.Controls.Add(tableNumeriPag);

    //terza cella 
    TableRow trTableScelta = new TableRow();
    TableCell cell1TableScelta = new TableCell();
    LiteralControl lc = new LiteralControl("Pag ");
    cell1TableScelta.Controls.Add(lc);
    trTableScelta.Cells.Add(cell1TableScelta);

    TableCell cell2TableScelta = new TableCell();
    tbPaginaScelta.Text = Convert.ToString((GridView1.PageIndex + 1));
    tbPaginaScelta.Width = (Unit)30;
    tbPaginaScelta.MaxLength = 10;
    tbPaginaScelta.CssClass = "testo";
    cell2TableScelta.Controls.Add(tbPaginaScelta);
    trTableScelta.Cells.Add(cell2TableScelta);

    TableCell cell3TableScelta = new TableCell();
    LiteralControl lc3 = new LiteralControl("/");
    cell3TableScelta.Controls.Add(lc3);
    cell3TableScelta.CssClass = "testo";
    trTableScelta.Cells.Add(cell3TableScelta);

    TableCell cell4TableScelta = new TableCell();
    LiteralControl lc4 = new LiteralControl(GridView1.PageCount.ToString());
    cell4TableScelta.Controls.Add(lc4);
    cell4TableScelta.CssClass = "testo";
    trTableScelta.Cells.Add(cell4TableScelta);

    TableCell cell5TableScelta = new TableCell();
    btn.ID = "btnGo";
    btn.Text = "GO";
    btn.ToolTip = "go to page";
    btn.CssClass = "testo";
    btn.Click += new EventHandler(btn_Click);
    cell5TableScelta.Controls.Add(btn);
    trTableScelta.Cells.Add(cell5TableScelta);

    Table tbSceltaPagina = new Table();
    tbSceltaPagina.Rows.Add(trTableScelta);
    TableCell cell1 = new TableCell();
    cell1.Controls.Add(tbSceltaPagina);
    cell1.CssClass = "testo";

    //Costruisco la tabella del  Pager
    Table table = new Table();
    table.Style.Add("width", "100%");
    table.CellPadding = 5;
    table.CellSpacing = 0;
    TableRow tableRow = new TableRow();
    tableRow.Cells.Add(cell0);
    cell.Style.Add("width", "100%");
    tableRow.Cells.Add(cell);
    tableRow.Cells.Add(cell1);
    table.Rows.Add(tableRow);

    e.Row.Cells[0].Controls.Remove(pager);
    e.Row.Cells[0].Controls.Add(table);
   }
  }
 }

 void btn_Click(object sender, EventArgs e)
 {
  try
  {
   String sPaginaScelta = tbPaginaScelta.Text;
   Int32 paginaScelta = Convert.ToInt32(sPaginaScelta);
   GridView1.PageIndex = paginaScelta - 1;
  }
  catch
  {
   tbPaginaScelta.Text = Convert.ToString(GridView1.PageIndex + 1);
  }
 }
}



File Anagrafica.xml
<List>
  <Student ID="1" Nome="Carmine" Cognome="Pacifico" />
  <Student ID="2" Nome="Mario" Cognome="Rossi" />
  <Student ID="3" Nome="Carlo" Cognome="Bianchi" />
  <Student ID="4" Nome="Michele" Cognome="Russo" />
  <Student ID="5" Nome="Rosa" Cognome="Rossa" />
  <Student ID="6" Nome="Anna" Cognome="Sara" />
  <Student ID="7" Nome="Gianni" Cognome="Miro" />
  <Student ID="8" Nome="Emilio" Cognome="Sasa" />
  <Student ID="9" Nome="Arianna" Cognome="Ara" />
</List>