- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Drawing;
-
- namespace Bruce.Web.Controls
- {
- /// <summary>
- /// GridViewPager 的摘要描述
- /// </summary>
- [ToolboxData("<{0}:GridViewPager ID=\"GridViewPager\" runat=\"server\"></{0}:GridViewPager>")]
- public class GridViewPager : Control
- {
- #region 按鈕文字
- private string _FirstPageText = "第一頁";
- public string FirstPageText
- {
- get { return _FirstPageText; }
- set { _FirstPageText = value; }
- }
- private string _PreviousPageText = "上一頁";
- public string PreviousPageText
- {
- get { return _PreviousPageText; }
- set { _PreviousPageText = value; }
- }
- private string _NextPageText = "下一頁";
- public string NextPageText
- {
- get { return _NextPageText; }
- set { _NextPageText = value; }
- }
- private string _LastPageText = "最後頁";
- public string LastPageText
- {
- get { return _LastPageText; }
- set { _LastPageText = value; }
- }
- #endregion
-
- /// <summary>
- /// 使用圖示按鈕
- /// </summary>
- private bool _IsImageButton;
- public bool IsImageButton
- {
- get { return _IsImageButton; }
- set { _IsImageButton = value; }
- }
-
- #region 按鈕圖示
- private string _FirstPageImageUrl;
- public string FirstPageImageUrl
- {
- get { return _FirstPageImageUrl; }
- set { _FirstPageImageUrl = value; }
- }
- private string _PreviousPageImageUrl;
- public string PreviousPageImageUrl
- {
- get { return _PreviousPageImageUrl; }
- set { _PreviousPageImageUrl = value; }
- }
- private string _NextPageImageUrl;
- public string NextPageImageUrl
- {
- get { return _NextPageImageUrl; }
- set { _NextPageImageUrl = value; }
- }
- private string _LastPageImageUrl;
- public string LastPageImageUrl
- {
- get { return _LastPageImageUrl; }
- set { _LastPageImageUrl = value; }
- }
- #endregion
-
- /// <summary>
- /// 使用下拉選單
- /// </summary>
- private bool _IsDropDownList;
- public bool IsDropDownList
- {
- get { return _IsDropDownList; }
- set { _IsDropDownList = value; }
- }
-
- /// <summary>
- /// 顯示頁碼個數
- /// </summary>
- private int _PagerRange = 3;
- public int PagerRange
- {
- get { return _PagerRange; }
- set
- {
- if (value < 1)
- {
- _PagerRange = 1;
- }
- else if (value > 10)
- {
- _PagerRange = 10;
- }
- else
- {
- _PagerRange = value;
- }
- }
- }
-
- /// <summary>
- /// 頁碼間隔
- /// </summary>
- private string _PagerPadding = "3px";
- public string PagerPadding
- {
- get { return _PagerPadding; }
- set { _PagerPadding = value; }
- }
-
- /// <summary>
- /// 文字顏色
- /// </summary>
- private Color _ForeColor;
- public Color ForeColor
- {
- get { return _ForeColor; }
- set { _ForeColor = value; }
- }
-
- private Control indexer = new Control();
- private GridView container;
-
- protected override void OnLoad(EventArgs e)
- {
- if (this.CheckContainer())
- {
- this.Controls.Clear();
- #region 設定按鈕屬性
- if (IsImageButton)
- {
- ImageButton btnFirstPage = CreateImageButton("btnFirstPage",
- FirstPageText,
- "0",
- container.PageIndex > 0,
- this.FirstPageImageUrl);
- ImageButton btnPreviousPage = CreateImageButton("btnPreviousPage",
- PreviousPageText,
- (container.PageIndex - 1).ToString(),
- container.PageIndex - 1 >= 0,
- this.PreviousPageImageUrl);
- ImageButton btnNextPage = CreateImageButton("btnNextPage",
- NextPageText,
- (container.PageIndex + 1).ToString(),
- container.PageIndex + 1 < container.PageCount,
- this.NextPageImageUrl);
- ImageButton btnLastPage = CreateImageButton("btnLastPage",
- LastPageText,
- (container.PageCount - 1).ToString(),
- container.PageIndex + 1 < container.PageCount,
- this.LastPageImageUrl);
-
- this.Controls.Add(btnFirstPage);
- this.Controls.Add(btnPreviousPage);
-
- this.Controls.Add(this.indexer);
-
- this.Controls.Add(btnNextPage);
- this.Controls.Add(btnLastPage);
- }
- else
- {
- LinkButton btnFirstPage = CreatePageButton("btnFirstPage",
- FirstPageText,
- "0",
- container.PageIndex > 0);
- LinkButton btnPreviousPage = CreatePageButton("btnPreviousPage",
- PreviousPageText,
- (container.PageIndex - 1).ToString(),
- container.PageIndex - 1 >= 0);
- LinkButton btnNextPage = CreatePageButton("btnNextPage",
- NextPageText,
- (container.PageIndex + 1).ToString(),
- container.PageIndex + 1 < container.PageCount);
- LinkButton btnLastPage = CreatePageButton("btnLastPage",
- LastPageText,
- (container.PageCount - 1).ToString(),
- container.PageIndex + 1 < container.PageCount);
-
- this.Controls.Add(btnFirstPage);
- this.Controls.Add(btnPreviousPage);
-
- this.Controls.Add(this.indexer);
-
- this.Controls.Add(btnNextPage);
- this.Controls.Add(btnLastPage);
- }
- #endregion
-
- if (IsDropDownList)
- this.RenderDrowDownListPager();
- else
- this.RenderPageNumbers();
- }
- base.OnLoad(e);
- }
-
- /// <summary>
- /// 位置錯誤時顯示錯誤訊息
- /// </summary>
- /// <param name="e"></param>
- protected override void OnPreRender(EventArgs e)
- {
- if (!this.CheckContainer())
- {
- this.Controls.Clear();
- Literal warming = new Literal();
- warming.Text = "<span style=\"color:red;\">Pager object must be in a GridView.<span>";
- this.Controls.Add(warming);
- }
- base.OnPreRender(e);
- }
-
- /// <summary>
- /// 檢查container
- /// </summary>
- /// <returns></returns>
- private bool CheckContainer()
- {
- if (container == null)
- {
- Control control = this;
-
- while (control.Parent != null && !(control.Parent is GridView))
- {
- control = control.Parent;
-
- }
-
- if (control.Parent != null)
- {
- container = control.Parent as GridView;
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return true;
- }
- }
-
- /// <summary>
- /// 建立圖形按鈕
- /// </summary>
- /// <param name="ID"></param>
- /// <param name="AlternateText"></param>
- /// <param name="CommandArgument"></param>
- /// <param name="Visible"></param>
- /// <param name="ImageUrl"></param>
- /// <returns></returns>
- private ImageButton CreateImageButton(string ID, string AlternateText, string CommandArgument, bool Visible, string ImageUrl)
- {
- ImageButton btn = new ImageButton();
- btn.ID = ID;
- btn.AlternateText = AlternateText;
- btn.CommandArgument = CommandArgument;
- btn.ImageUrl = ImageUrl;
- btn.Visible = Visible;
- btn.ImageAlign = ImageAlign.Middle;
- btn.Click += PageButton_Click;
- btn.Style["margin-left"] = this.PagerPadding;
- btn.Style["margin-right"] = this.PagerPadding;
- return btn;
- }
-
- /// <summary>
- /// 建立文字按鈕
- /// </summary>
- /// <param name="ID"></param>
- /// <param name="Text"></param>
- /// <param name="CommandArgument"></param>
- /// <param name="Visible"></param>
- /// <returns></returns>
- private LinkButton CreatePageButton(string ID, string Text, string CommandArgument, bool Visible)
- {
- LinkButton btn = new LinkButton();
- btn.ForeColor = this.ForeColor;
- btn.ID = ID;
- btn.Text = Text;
- btn.CommandArgument = CommandArgument;
- btn.Visible = Visible;
- btn.Click += PageButton_Click;
- btn.Style["margin-left"] = this.PagerPadding;
- btn.Style["margin-right"] = this.PagerPadding;
- return btn;
- }
-
- /// <summary>
- /// 處理頁碼
- /// </summary>
- private void RenderPageNumbers()
- {
- int start = Math.Max(0, this.container.PageIndex - this.PagerRange);
- int end = Math.Min(this.container.PageCount - 1, this.container.PageIndex + this.PagerRange);
- for (int i = start; i <= end; i++)
- {
- if (i == this.container.PageIndex)
- {
- Literal currentPage = new Literal();
- currentPage.Text = (i + 1).ToString();
- this.indexer.Controls.Add(currentPage);
- }
- else
- {
- this.indexer.Controls.Add(CreatePageButton("p" + i, (i + 1).ToString(), i.ToString(), true));
- }
- }
- }
-
- /// <summary>
- /// 處理下拉選單
- /// </summary>
- private void RenderDrowDownListPager()
- {
- DropDownList ddl = this.indexer.FindControl("ddlPageSelector") as DropDownList;
- if (ddl == null)
- {
- ddl = new DropDownList();
- ddl.ID = "ddlPageSelector";
- ddl.AutoPostBack = true;
- ddl.SelectedIndexChanged += PageList_Select;
-
- Literal txt = new Literal();
- txt.Text = "第";
- this.indexer.Controls.Add(txt);
- this.indexer.Controls.Add(ddl);
- txt = new Literal();
- txt.Text = "頁";
- this.indexer.Controls.Add(txt);
- }
-
- if (ddl.Items.Count == 0)
- {
- for (int i = 0; i < this.container.PageCount; i++)
- {
- ddl.Items.Add(new ListItem((i + 1).ToString(), i.ToString()));
- }
- }
- ddl.SelectedValue = this.container.PageIndex.ToString();
- }
-
- /// <summary>
- /// 換頁動作
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- protected void PageButton_Click(object sender, EventArgs e)
- {
- if (this.CheckContainer())
- {
-
- LinkButton btn = sender as LinkButton;
- if (btn != null)
- this.container.PageIndex = int.Parse(btn.CommandArgument);
-
- ImageButton ibtn = sender as ImageButton;
- if (ibtn != null)
- this.container.PageIndex = int.Parse(ibtn.CommandArgument);
- }
- }
- /// <summary>
- /// 換頁動作
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- protected void PageList_Select(object sender, EventArgs e)
- {
- if (this.CheckContainer())
- {
- DropDownList ddl = sender as DropDownList;
- this.container.PageIndex = int.Parse(ddl.SelectedValue);
- }
- }
- }
- }