浏览:3202008-03-19 13:50   来自WOW玩家      :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

namespace Madou.WebControls
{

    //public delegate void PageIndexChangedDelegate(object sender,PageIndexChangedEventArgs e);  


    [ToolboxData("<{0}:Pager runat=server></{0}:Pager>")]
    [ToolboxItem("Pager")]
    [Designer(typeof(PagerControlDesigner))]
    public class Pager : CompositeControl, IPager
    {

     
        private static readonly object LockHelper = new object();

        #region"Override"
        protected override void CreateChildControls()
        {

          
            int max = MaxPageIndex(PageIndex);
            int min = MinPageIndex(PageIndex);
            if (Parameters.Count == 0)
                throw new ArgumentException("请设定Parameters参数");
            string url = Parameters.Keys[0];
            object[] var = Parameters.Values[0];

            if (this.Events[_EventPageIndexChanging] != null)
            {

                EventHandler<PageIndexChangedEventArgs> e = (EventHandler<PageIndexChangedEventArgs>)Events[_EventPageIndexChanging];
                e(this, new PageIndexChangedEventArgs(pageSize, PageIndex, PageCount, url, var));             
            }

            if (PageCount <= max) max = PageCount;

            if (PageCount == 1) return;


            if (min != 1) //Prev
            {
                HyperLink hyprev = new HyperLink();
                hyprev.Text = "<< ";
                if (var == null)
                {
                    hyprev.NavigateUrl = string.Format(url, min - 1);
                }
                else
                {
                    var[0] = min - 1;
                    hyprev.NavigateUrl = string.Format(url, var);
                }
                Controls.Add(hyprev);
            }

            for (int i = min; i <= max; i++)
            {
                HyperLink hy = new HyperLink();
                if (var == null)
                {
                    hy.NavigateUrl = string.Format(url, i);
                }
                else
                {
                    var[0] = i;
                    hy.NavigateUrl = string.Format(url, var);
                }
                hy.Text = i.ToString();
                if (PageIndex == i) hy.NavigateUrl = string.Empty;
                Controls.Add(hy);


            }

            if (PageCount > max)  //Next
            {
                HyperLink hynext = new HyperLink();
                hynext.Text = " >>";
                if (var == null)
                {
                    hynext.NavigateUrl = string.Format(url, max + 1);
                }
                else
                {
                    var[0] = max + 1;
                    hynext.NavigateUrl = string.Format(url, var);
                }
                Controls.Add(hynext);

                if(Events[_EventPageIndexChanged] !=null)
                {
                    EventHandler<PageIndexChangedEventArgs> e = (EventHandler<PageIndexChangedEventArgs>)Events[_EventPageIndexChanging];
                    e(this, new PageIndexChangedEventArgs(pageSize, PageIndex, PageCount, url, var));    
                }
            }
        }
       
        protected override HtmlTextWriterTag TagKey
        {
            get
            {
                return HtmlTextWriterTag.Div;
            }
        }

        #endregion

        #region"定义事件"
        //public event PageIndexChangedDelegate PageIndexChanged;
        private static readonly object _EventPageIndexChanging = new object();
        private static readonly object _EventPageIndexChanged = new object();

 

        public event EventHandler<PageIndexChangedEventArgs> PageIndexChanging
        {
            add
            {
                Events.AddHandler(_EventPageIndexChanging, value);
            }
            remove
            {
                Events.RemoveHandler(_EventPageIndexChanging, value);               
            }
        }

        public event EventHandler<PageIndexChangedEventArgs> PageIndexChanged
        {
            add
            {
                Events.AddHandler(_EventPageIndexChanged, value);
            }
            remove
            {
                Events.RemoveHandler(_EventPageIndexChanged, value);
            }
        }

        #endregion

        #region IPager Members

        private int pageIndex = 1;
        public virtual int PageIndex
        {
            get
            {            
                return pageIndex;
            }
            set
            {            
                pageIndex = value;
            }
        }

       
    
        public virtual int PageCount
        {
            get
            {
                return RecordCount % PageSize == 0 ? RecordCount / PageSize : RecordCount / PageSize + 1;
            }           
        }     

 

        private int pageSize = 10;
        public virtual int PageSize
        {
            get
            {            
                return pageSize;
            }
            set
            {             
                pageSize = value;
            }
        }
        private int _RecordCount;

        /// <summary>
        /// 总记录数
        /// </summary>
        [Category("分页设置")]
        [Description("总记录数")]
        public int RecordCount
        {
            get
            {           
                return _RecordCount;
            }
            set
            {         
                _RecordCount = value;
            }
        }


      
    
       private System.Collections.Generic.SortedList<string, object[]> _Parameters = null;
        /// <summary>
        /// 页参数配置
        /// </summary>
       [Bindable(false)]
       [Browsable(false)]
        public  System.Collections.Generic.SortedList<string, object[]> Parameters
        {
            get
            {
            
                lock (LockHelper)
                {
                    if (_Parameters == null)
                    {
                        _Parameters = new SortedList<string, object[]>();
                    }
                }
                return _Parameters;
            }          
        }


        #endregion

        #region"HELP"

        /// <summary>
        /// 根据当前页索引返回最大的页数,如Pageindex=1,返回10,pageindex=43,返回50,pageindex=101,返回110
        /// </summary>
        /// <param name="pageindex"></param>
        /// <returns></returns>
        public int MaxPageIndex(int pageindex)
        {
            if (pageindex < 10)
                return 10;
            string numstr = pageindex.ToString();
            numstr = numstr.Substring(0, numstr.Length - 1);


            return Convert.ToInt32(numstr + "0") + 10;

        }

        /// <summary>
        /// 参考MaxPageIndex
        /// </summary>
        /// <param name="pageindex"></param>
        /// <returns></returns>
        public int MinPageIndex(int pageindex)
        {
            if (pageindex < 10)
                return 1;
            string numstr = pageindex.ToString();
            numstr = numstr.Substring(0, numstr.Length - 1);
            return Convert.ToInt32(numstr + "0");
        }
        #endregion
       
    }

    public class PagerControlDesigner : System.Web.UI.Design.WebControls.CompositeControlDesigner
    {
        private Pager _pager;
        public PagerControlDesigner() : base() { }

        public override void Initialize(IComponent component)
        {
            base.Initialize(component);
            _pager = (Pager)component;
        }
        public override string GetDesignTimeHtml()
        {
            if (_pager != null)
            {
                StringWriter sw = new StringWriter();
                HtmlTextWriter writer = new HtmlTextWriter(sw);
                _pager.RenderControl(writer);
                return sw.ToString();
            }
            else
            {
                return base.GetDesignTimeHtml();
            }
        }
    }
}

楼主
  1个月前   WOW玩家      :
回复  1楼 回到顶楼 
  1个月前   路过秋天      :
很好很强大
回复  2楼 回到顶楼 
  1个月前   WOW玩家      :
回复  3楼 回到顶楼 
  1个月前   小杰      :


发现这个表情有重复...
回复  4楼 回到顶楼 
  1个月前   陌上花开      :

怎么是错的啊??????
回复  5楼 回到顶楼 
  1个月前   陌上花开      :
运行不出来????
回复  6楼 回到顶楼 
  1个月前   NewSea.      :
没有说明,如同垃圾!
回复  7楼 回到顶楼 
  1个月前   WOW玩家      :
什么错误。
回复  8楼 回到顶楼 

你还不是小组成员,加入小组以后才能发布新主题!
> 返回“广州net”


其他话题

1 12024