Pagination

Jde o kompozitní server control určený pro ovládání stránkování. Motivací k vytvoření prvku bylo vytvoření podobného stránkování, jaké známe z GridView, avšak pro použití s prvkem Repeater či DataList ve formuláři a se zachováním přístupnosti, nezávislosti na klientském skriptování. Pro stránkování jsou uživateli nabídnuty volitelně tlačítka vpřed,zpět a/nebo sada radiobuttonů ukazujících přímo číslo stránky a zvolenou stránku, čímž je zajištěna korektní funkčnost formuláře i bez podpory klientského skriptování.

Prvek také zajišťuje inteligentní vykreslení daného počtu čísel stránek a automaticky doplní odkaz na "další sadu stránek", prvky, které nemají v dané situaci smysl jsou zakázané (např. přechod na předchozí stránku v situaci, kdy jsme na první stránce).
Ideálně se hodí pro použití ve spojení s univerzální stránkovací procedurou, viz článek Univerzální stránkovací procedura v MS SQL.

Screenshoty příkladů použití ve stránce

Stylovaný prvek s podporou klientského skriptování (na konci odkaz na "další sadu" stránek)

Stylovaný prvek  po přechodu na další sadu stránek (na začátku odkaz na předchozí sadu stránek)

Bez stylování (na začátku odkaz na předchozí sadu stránek)

Bez stylování a podpory JavaScriptu (je k dispozici tlačítko pro potvrzení volby stránky - nefunguje zde AutoPostBack)

Bez stylování a podpory JavaScriptu - na první stránce, tlačítko "Předchozí" je ve stavu Disabled

Vlastnosti prvku Pagination

public String GoToPageText
- text tlačítka pro přechod na zvolenou stránku, tlačítko se zobrazuje pouze pokud klient nepodporuje JavaScript

public String GoToPageToolTip
- tooltip tlačítka pro přechod na zvolenou stránku, tlačítko se zobrazuje pouze pokud klient nepodporuje JavaScript

public String NumericPagesToolTip
- tooltip radiobuttonů pro přechod na zvolenou stránku

public String NextPageText
- text tlačítka pro přechod na následující stránku

public String NextPageToolTip
- tooltip tlačítka pro přechod na následující stránku

public String PrevPageText
- text tlačítka pro přechod na předchozí stránku

public String PrevPageToolTip
- text tlačítka pro přechod na následující stránku

public String ButtonCssClass
- třída CSS pro tlačítka

public String RadioButtonCssClass
- třída CSS pro radiobuttony

public Int32 VirtualItemCount
- vrací nebo nastaví virtuální (celkový) počet položek, které jsou stránkovány - vlastnost má týž význam, jako u prvků DataGrid, GridView

public Int32 SelectedPageIndex
- vrací nebo nastaví index právě zvolené stránky

public Int32 PageCount
- pouze vrací celkový počet stránek ke stránkování

public Int32 PageSize
- vrací nebo nastaví počet položek v jedné stránce - vlastnost má týž význam, jako u prvků DataGrid, GridView

public Int32 PageButtonCount
- vrací nebo nastaví maximální počet položek číselných buttonů (čísel) stránek, na konci nebo začátku seznamu je generován odkaz pro přechod na "další sadu" stránek, pokud nějaká předchází/následuje - vlastnost má týž význam, jako u prvků DataGrid, GridView

public PaginationNumericRepeatDirection NumericRepeatDirection
- styl zobrazení čísel stránek - radiobuttonů

public PaginationMode Mode
- režim zobrazení stránkovacích prvků

public Boolean CausesValidation
- nastavuje, zda použití prvku vyvolává validaci stránky

Události prvku Pagination

public event EventHandler SelectedPageIndexChanged
- je vyvolána v okamžiku, kdy je změněn index zvolené stránky, hodí se tedy pro získání dat dané stránky z datového zdroje a navázání na zobrazovací prvek

Použité enumerace

public enum PaginationMode - režim zobrazení ovládacích prvků
- AllControls: čísla stránek i tlačítka vpřed/zpět
- NextPrev: pouze tlačítka vpřed/zpět
- Numeric: pouze čísla stránek

public enum PaginationNumericRepeatDirection - způsob zobrazení čísel stránek
- Horizontal: vodorovně
- Vertical: svisle
 

Příklad použití pro SqlDataReader k naplnění Repeateru s využitím stránkovací procedury

private void Page_Load(object sender, System.EventArgs e)
{
  pgnSearch.GoToPageText = Global.LocalizationManager.GetString("PaginationGoToPageText");
  pgnSearch.GoToPageToolTip = Global.LocalizationManager.GetString("PaginationGoToPageToolTip");
  pgnSearch.NumericPagesToolTip = Global.LocalizationManager.GetString("PaginationNumericPagesToolTip");
  pgnSearch.NextPageText = Global.LocalizationManager.GetString("PaginationNextPageText");
  pgnSearch.NextPageToolTip = Global.LocalizationManager.GetString("PaginationNextPageToolTip");
  pgnSearch.PrevPageText = Global.LocalizationManager.GetString("PaginationPrevPageText");
  pgnSearch.PrevPageToolTip = Global.LocalizationManager.GetString("PaginationPrevPageToolTip");
  ..
  if (!Page.IsPostBack)
    Bind_Page(sender, e);
}

private void Bind_Page(Object sender, EventArgs e)
{
  using (SqlConnection connection = new SqlConnection(PublicDBReaderString))
  {
    using (SqlCommand myCmd = new SqlCommand("[dbo].[PaginateTable]",connection))
    {
      myCmd.CommandType = CommandType.StoredProcedure;
      myCmd.Parameters.Add("@PageSize", SqlDbType.Int).Value = pgnSearch.PageSize;
      myCmd.Parameters.Add("@CurrentPageIndex", SqlDbType.Int).Value = pgnSearch.SelectedPageIndex;
      myCmd.Parameters.Add("@TableName", SqlDbType.VarChar,64).Value = "[dbo].[Events]";
      myCmd.Parameters.Add("@KeyField", SqlDbType.VarChar,32).Value = "[EventDate]";
      myCmd.Parameters.Add("@RowFilter", SqlDbType.VarChar,3128).Value = "DATEDIFF(dd,[EventDate],GETDATE()) <= 0";
      try
      {
        connection.Open();
        SqlDataReader myReader = myCmd.ExecuteReader();

        if (myReader.Read())
          pgnSearch.VirtualItemCount = myReader.GetInt32(0);
        else
          pgnSearch.VirtualItemCount = 0;

        if (pgnSearch.PageCount > 1)
          pgnSearch.Visible = true;
        else
          pgnSearch.Visible = false;

        myReader.NextResult();
        rptSearch.DataSource = myReader;
        rptSearch.DataBind();
        myReader.Close();
        connection.Close();
      }
      catch
      {
        blnError.Visible = true;
      }
      finally
      {
        if (connection.State != ConnectionState.Closed)
          connection.Close();
      }
    }
  }
}
 

 private void InitializeComponent()
{
  this.pgnSearch.SelectedPageIndexChanged += new System.EventHandler(this.Bind_Page);
  this.Load += new System.EventHandler(this.Page_Load);
}
 

<div class="pagingElement">
  <Pc:Pagination Id="pgnSearch" Mode="AllControls" Visible="False" CausesValidation="False" ButtonCssClass="pageButton" RadioButtonCssClass="pageRadio" PageButtonCount="5" PageSize="10" RunAt="server" />
</div>

Stažení prvku Pagination