⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ajaxpager.cs

📁 这是一个简单的论坛程序源码
💻 CS
字号:
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.IO;
using System.Web.UI;
using System.Globalization;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using NetFocus.Web.Core;

namespace NetFocus.Web.Applications.Forum
{
    public interface IPageIndexChangedEventHandler
    {
        void BindData(int pageIndex, int pageSize);
    }

    public class AjaxPager : Control, ICallbackEventHandler, INamingContainer
    {
        #region Member Variables

        private int lowerBound;
        private int upperBound;
        private HyperLink previousLink;
        private HyperLink nextLink;
        private HyperLink firstLink;
        private HyperLink lastLink;
        private Control targetControl;

        #endregion

        #region Public Properties

        public int PageIndex
        {
            get
            {
                int pageIndex = 1;
                if (Page != null && Page.IsPostBack && ViewState["PageIndex"] != null)
                {
                    pageIndex = (int)ViewState["PageIndex"];
                }
                if (pageIndex < 1)
                {
                    return 1;
                }
                else
                {
                    return pageIndex;
                }
            }
            set
            {
                ViewState["PageIndex"] = value;
            }
        }
        public int PageSize
        {
            get
            {
                int pageSize = Convert.ToInt32(ViewState["PageSize"]);
                if (pageSize <= 0)
                {
                    return 10;
                }
                return pageSize;
            }
            set
            {
                ViewState["PageSize"] = value;
            }
        }
        public int LeftLength
        {
            get
            {
                return PageLength / 2;
            }
        }
        public int RightLength
        {
            get
            {
                return PageLength / 2;
            }
        }
        public int PageLength
        {
            get
            {
                int pageLength = Convert.ToInt32(ViewState["PageLength"]);

                if (pageLength <= 3)
                    return 3;

                if (pageLength % 2 == 0)
                {
                    return pageLength + 1;
                }

                return pageLength;
            }
            set
            {
                ViewState["PageLength"] = value;
            }

        }
        public int TotalPages
        {
            get
            {
                return CalculateTotalPages(TotalRecords);
            }
        }
        public int TotalRecords
        {
            get
            {
                return Convert.ToInt32(ViewState["TotalRecords"]);
            }
            set
            {
                ViewState["TotalRecords"] = value;
            }
        }
        public string DataWrapperID
        {
            get
            {
                string s = ViewState["DataWrapperID"] as string;
                if (s == null)
                {
                    s = string.Empty;
                }
                return s;
            }
            set
            {
                ViewState["DataWrapperID"] = value;
            }
        }
        public string TargetControlID
        {
            get
            {
                string s = ViewState["TargetControlID"] as string;
                if (s == null)
                {
                    s = string.Empty;
                }
                return s;
            }
            set
            {
                ViewState["TargetControlID"] = value;
            }
        }

        #endregion

        #region Overrides Methods

        protected override void OnLoad(EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                CreatePageLinks();
                RegisterClientScripts();
            }
            else
            {
                targetControl = Globals.FindControl(this, TargetControlID);
            }
        }
        protected override void Render(HtmlTextWriter writer)
        {
            if (TotalPages <= 1)
            {
                return;
            }
            RenderFirst(writer);
            RenderPrevious(writer);
            RenderPagingButtons(writer);
            RenderNext(writer);
            RenderLast(writer);
        }

        #endregion

        #region Public Methods

        public virtual int CalculateTotalPages(int totalRecords)
        {
            int totalPagesAvailable;

            if (totalRecords == 0)
            {
                return 0;
            }

            totalPagesAvailable = totalRecords / PageSize;

            if ((totalRecords % PageSize) > 0)
            {
                totalPagesAvailable++;
            }

            return totalPagesAvailable;

        }

        #endregion

        #region ICallbackEventHandler Implementation

        public void RaiseCallbackEvent(string pageIndex)
        {
            int currentPageIndex = int.Parse(pageIndex);
            if (currentPageIndex != PageIndex)
            {
                ((IPageIndexChangedEventHandler)targetControl).BindData(currentPageIndex, PageSize);
            }
            PageIndex = currentPageIndex;
            CreatePageLinks();
        }
        public string GetCallbackResult()
        {
            return Globals.RenderControl(targetControl);
        }

        #endregion

        #region Helpers

        private void RenderFirst(HtmlTextWriter writer)
        {
            if ((PageIndex > LeftLength + 1) && (TotalPages > PageLength))
            {
                firstLink.RenderControl(writer);
                LiteralControl l = new LiteralControl("&nbsp;...&nbsp;");
                l.RenderControl(writer);
            }
        }
        private void RenderLast(HtmlTextWriter writer)
        {
            if (((PageIndex + RightLength) < TotalPages) && (TotalPages > PageLength))
            {
                LiteralControl l = new LiteralControl("&nbsp;...&nbsp;");
                l.RenderControl(writer);
                lastLink.RenderControl(writer);
            }
        }
        private void RenderPrevious(HtmlTextWriter writer)
        {
            if (PageIndex > 1)
            {
                previousLink.RenderControl(writer);
                Literal l = new Literal();
                l.Text = "&nbsp;";
                l.RenderControl(writer);
            }

        }
        private void RenderNext(HtmlTextWriter writer)
        {
            if (PageIndex < TotalPages)
            {
                Literal l = new Literal();
                l.Text = "&nbsp;";
                l.RenderControl(writer);
                nextLink.RenderControl(writer);
            }
        }
        private void RenderButtonRange(int start, int end, HtmlTextWriter writer)
        {
            for (int i = start; i <= end; i++)
            {
                if (PageIndex == i)
                {
                    Literal l = new Literal();
                    l.Text = "<span class=\"currentPage\">" + i.ToString() + "</span>";
                    //l.Text = i.ToString();
                    l.RenderControl(writer);
                }
                else
                {
                    Controls[i - start].RenderControl(writer);
                }
                if (i < end)
                {
                    writer.Write(" ");
                }
            }

        }
        private void RenderPagingButtons(HtmlTextWriter writer)
        {
            RenderButtonRange(lowerBound, upperBound, writer);
        }
        private string CreateOnClickScript(int pageIndex)
        {
            return string.Format("javascript:turnPage({0});", pageIndex);
        }
        private void InitPageBounds()
        {
            lowerBound = PageIndex - LeftLength;
            upperBound = PageIndex + RightLength;

            if (lowerBound < 1)
            {
                upperBound += 1 - lowerBound;
                lowerBound = 1;
            }
            if (upperBound > TotalPages)
            {
                lowerBound -= upperBound - TotalPages;
                upperBound = TotalPages;
            }
            if (lowerBound < 1)
            {
                lowerBound = 1;
            }
            if (upperBound > TotalPages)
            {
                upperBound = TotalPages;
            }
        }
        private void AddPageLinks()
        {
            InitPageBounds();

            HyperLink link;
            for (int i = lowerBound; i <= upperBound; i++)
            {
                link = new HyperLink();
                link.EnableViewState = false;
                link.Text = i.ToString();
                link.ID = i.ToString();
                link.NavigateUrl = CreateOnClickScript(i);
                Controls.Add(link);
            }
        }
        private void AddFirstLastLinks()
        {      
            firstLink = new HyperLink();
            firstLink.ID = "First";
            firstLink.Text = "第一页";
            firstLink.NavigateUrl = CreateOnClickScript(1);
            Controls.Add(firstLink);

            lastLink = new HyperLink();
            lastLink.ID = "Last";
            lastLink.Text = "最后一页";
            lastLink.NavigateUrl = CreateOnClickScript(TotalPages);
            Controls.Add(lastLink);
        }
        private void AddPreviousNextLinks()
        {
            previousLink = new HyperLink();
            previousLink.ID = "Prev";
            previousLink.Text = "上一页";
            previousLink.NavigateUrl = CreateOnClickScript(PageIndex - 1);
            Controls.Add(previousLink);

            nextLink = new HyperLink();
            nextLink.ID = "Next";
            nextLink.Text = "下一页";
            nextLink.NavigateUrl = CreateOnClickScript(PageIndex + 1);
            Controls.Add(nextLink);
        }
        private void CreatePageLinks()
        {
            Controls.Clear();
            AddPageLinks();
            AddPreviousNextLinks();
            AddFirstLastLinks();
        }
        private void RegisterClientScripts()
        {
            string turnPageScript = "function turnPage(pageIndex) { CallServer(pageIndex,'" + DataWrapperID + "');}";
            string receiveCallBackScript = "function ReceiveCallback(arg,context){ document.getElementById(context).innerHTML = arg; }";
            string callbackReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveCallback", "context", false);

            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.ClientID + "TurnPageScript", turnPageScript, true);
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.ClientID + "ReceiveCallBackScript", receiveCallBackScript, true);
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.ClientID + "CallServer", string.Format("function CallServer(arg,context){{ {0} }}", callbackReference), true);
        }

        #endregion
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -