通用的分页用户控件

前台代码:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PagerList.ascx.cs" Inherits="PagerList" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"  %>

<asp:Table width="100%" runat="server" id="tblPager" HorizontalAlign="Center" CssClass="table">
    <asp:TableRow>
        <asp:TableCell HorizontalAlign="Center" Font-Size="0.92em">           
            <FONT class="fontClass">共<asp:label id="lblRecordCount" runat="server">0</asp:label>筆</FONT>
            &nbsp;|&nbsp;<asp:linkbutton id="btnFirst" runat="server" CommandArgument="fist" CssClass="fontClass">第一頁</asp:linkbutton>&nbsp;|
            <asp:linkbutton id="btnPrev" runat="server" CommandArgument="prev" CssClass="fontClass">
                          上一頁</asp:linkbutton>&nbsp;| <FONT  class="fontClass">到第
                    <asp:DropDownList ID="txtGoPage" runat="server" AutoPostBack="true"></asp:DropDownList>&nbsp;頁</FONT>&nbsp;|
            <asp:linkbutton id="btnNext" runat="server" CommandArgument="next" CssClass="fontClass">
                          下一頁</asp:linkbutton>&nbsp;|
            <asp:linkbutton id="btnLast" runat="server" CommandArgument="last" CssClass="fontClass">
                          最末頁</asp:linkbutton>&nbsp;| <FONT class="fontClass">
                第
                <asp:label id="lblCurrentIndex" runat="server">1</asp:label>頁/共
                <asp:label id="lblPageCount" runat="server">0</asp:label>頁
                &nbsp;</FONT>
        </asp:TableCell>
    </asp:TableRow>
</asp:Table>

后台代码:

using System;
using System.Data;
using System.Drawing;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;

public partial class PagerList : System.Web.UI.UserControl
{
    #region 數據綁定事件
    //public delegate void DataListPageChangedEventHandler(object sender , DataGridPageChangedEventArgs e);
    /// <summary>
    /// 數據綁定事件
    /// </summary>
    public delegate void DataBindEventHandler();
    #endregion

    #region 初始化網頁
    protected void Page_Load(object sender, EventArgs e)
    {
        // 在這裡放置使用者程式碼以初始化網頁
        if (!Page.IsPostBack)
        {
            //txtGoPage.Attributes.Add("onclick", "this.select()");
            txtGoPage.Style.Add("text-align", "center");

            ListBind();
            txtGoPage.SelectedValue = lblCurrentIndex.Text;
        }

    }
    #endregion


    #region Web Form 設計工具產生的程式碼
    protected override void OnInit(EventArgs e)
    {
        //
        // CODEGEN: 此為 ASP.NET Web Form 設計工具所需的呼叫。
        //
        this.PageIndexChanged += new DataGridPageChangedEventHandler(OnPageIndexChanged);
        InitializeComponent();
        base.OnInit(e);
    }

    /// <summary>
    ///        此為設計工具支援所必須的方法 - 請勿使用程式碼編輯器修改
    ///        這個方法的內容。
    /// </summary>
    private void InitializeComponent()
    {
        this.Load += new System.EventHandler(this.Page_Load);
        this.btnFirst.Click += new EventHandler(btnFirst_Click);
        this.btnLast.Click += new EventHandler(btnLast_Click);
        this.btnNext.Click += new EventHandler(btnNext_Click);
        this.btnPrev.Click += new EventHandler(btnPrev_Click);
        //this.btnGoPage.Click+=new EventHandler(txtGoPage_TextChanged);
        this.txtGoPage.SelectedIndexChanged += new EventHandler(txtGoPage_TextChanged);

    }
    #endregion

    #region 變量定義
    /// <summary>
    /// 綁定數據
    /// </summary>
    public event DataBindEventHandler BindData;
    /// <summary>
    /// 換頁事件
    /// </summary>
    private event DataGridPageChangedEventHandler PageIndexChanged;
    #endregion

    #region 第一頁
    private void btnFirst_Click(object sender, System.EventArgs e)
    {
        int intNewPage = 1;
        this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
    }
    #endregion

    #region 前一頁
    private void btnPrev_Click(object sender, System.EventArgs e)
    {
        int intNewPage = CurrentPageIndex - 1;
        this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
    }
    #endregion

    #region 下一頁
    private void btnNext_Click(object sender, System.EventArgs e)
    {
        int intNewPage = CurrentPageIndex + 1;
        this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
    }
    #endregion

    #region 最後一頁
    private void btnLast_Click(object sender, System.EventArgs e)
    {
        int intNewPage = PageCount;
        this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
    }
    #endregion

    #region 改變第幾頁的textbox值
    private void txtGoPage_TextChanged(object sender, System.EventArgs e)
    {
        try
        {
            int intNewPage = Convert.ToInt32(txtGoPage.SelectedValue);
            this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
        }
        catch
        {
            int intNewPage = Convert.ToInt32(lblCurrentIndex.Text);
            this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
        }
    }
    #endregion

    #region 設定link是否可以點選
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        if (this.CurrentPageIndex <= 1)
        {
            btnFirst.Enabled = false;
            btnPrev.Enabled = false;
        }
        else
        {
            btnFirst.Enabled = true;
            btnPrev.Enabled = true;
        }
        if (this.CurrentPageIndex >= this.PageCount)
        {
            btnNext.Enabled = false;
            btnLast.Enabled = false;
        }
        else
        {
            btnNext.Enabled = true;
            btnLast.Enabled = true;
        }
        if (this.PageCount <= 1)
        {
            //this.btnGoPage.Enabled=false;
            txtGoPage.Enabled = false;
        }
        else
        {
            //this.btnGoPage.Enabled=true;
            txtGoPage.Enabled = true;
        }

        base.Render(writer);
    }
    #endregion

    #region 取得或設定當前頁
    /// <summary>
    /// 取得或設定當前頁
    /// </summary>   
    public int CurrentPageIndex
    {
        get
        {
            if (ViewState["CurrentPageIndex"] == null) return 1;
            int _tempI=Convert.ToInt32(ViewState["CurrentPageIndex"]);
            if (_tempI < 1)
            {
                return 1;
            }
            else
            {
                return _tempI;
            }           
        }
        set
        {
            ViewState["CurrentPageIndex"] = value;
            this.lblCurrentIndex.Text = CurrentPageIndex.ToString();
        }
    }
    #endregion

    /// <summary>
    /// 頁大小
    /// </summary>
    public int PageSize
    {
        get
        {
            if (ViewState["PageSize"] == null) return 10;
            return Convert.ToInt32(ViewState["PageSize"]);
        }
        set { ViewState["PageSize"] = value; }
    }

    #region 取得或設定總頁數
    /// <summary>
    /// 取得或設定總頁數
    /// </summary>   
    public int PageCount
    {
        get
        {
            int pCount = 0;
            if (PageSize > 0)
            {
                pCount = RecordCount / PageSize + (RecordCount % PageSize > 0 ? 1 : 0);
            }
            return pCount;
        }
    }
    #endregion

    #region 取得或設定總筆數
    /// <summary>
    /// 取得或設定總筆數
    /// </summary>   
    public int RecordCount
    {
        get
        {
            if (ViewState["RecordCount"] == null) return 0;
            return Convert.ToInt32(ViewState["RecordCount"]);
        }
        set
        {
            ViewState["RecordCount"] = value;
            this.lblRecordCount.Text = RecordCount.ToString();
            this.lblPageCount.Text = PageCount.ToString();
            ListBind();
            if (CurrentPageIndex != 0)
            {
                if (CurrentPageIndex > PageCount)
                {
                    CurrentPageIndex = PageCount;
                }
                txtGoPage.SelectedValue = CurrentPageIndex.ToString();
            }
        }
    }
    #endregion

    #region 改變頁碼
    private void OnPageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
        this.CurrentPageIndex = e.NewPageIndex;
        this.BindData();
    }
    #endregion

    #region 搜索時綁定List的值(當頁面搜索動作不重新調用本頁面時使用)
    /// <summary>
    /// 搜索時綁定List的值
    /// </summary>
    private void ListBind()
    {
        txtGoPage.Items.Clear();
        for (int i = 1; i < this.PageCount + 1; i++)
        {
            txtGoPage.Items.Add(new ListItem(i.ToString(), i.ToString()));
        }
    }
    #endregion
}
 

猜你喜欢

转载自blog.csdn.net/wlzwcr/article/details/6517800