分页复合件

来源:互联网 发布:mac上的dj软件 编辑:程序博客网 时间:2024/05/17 02:00

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.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Xml;

namespace MyPager
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:Pager runat=server></{0}:Pager>")]
    public class Pager : Control, INamingContainer
    {
        private string _constrkey;//数据库连接字符键值
        private string _selectstr;//返回字段
        private string _tablename;//表名
        private string _wherestr;//条件语句
        private string _orderby;//排序语句
        private string _controlname;//显示控件名称
        private ControlType _viewcontroltype;//显示控件类型
        private int _pagesize;//每页记录数
       
        private int _pageindex;//当前页码
        private int _pagecount;//总页数
        private int _rowcount;//记录总数

        private string _pagerstyle;//分页控件外DIV样式
        private string _linkstyle;//链接样式
        private string _focusstyle;//焦点字样式


        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("数据库连接键值,在AppSettings中设置")
        ]
        public string ConStrKey {
            set { _constrkey = value; }
            get { return _constrkey; }
        }

        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("读取字段")
        ]
        public string SelectStr
        {
            set { _selectstr = value; }
            get { return _selectstr; }
        }

        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("读取表名")
        ]
        public string TableName
        {
            set { _tablename = value; }
            get { return _tablename; }
        }

        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("条件语句,不需要Where")
        ]
        public string WhereStr
        {
            set { _wherestr = value; }
            get { return _wherestr; }
        }

        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("排序语句,不需要Order By ")
        ]
        public string OrderBy
        {
            set { _orderby = value; }
            get { return _orderby; }
        }

        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("显示数据控件名称")
        ]
        public string ControlName
        {
            set { _controlname = value; }
            get { return _controlname; }
        }

        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("显示数据控件类型")
        ]
        public ControlType ViewControlType
        {
            set { _viewcontroltype = value; }
            get { return _viewcontroltype; }
        }

        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("每页记录数")
        ]
        public int PageSize
        {
            set { _pagesize = value; }
            get { return _pagesize; }
        }


        public enum ControlType
        {
            DataList,
            GridView,
            Repeater
        }

        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("分页控件外DIV样式")
        ]
        public string PagerStyle
        {
            set { _pagerstyle = value; }
            get { return _pagerstyle; }
        }

        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("LinkBtn链接样式")
        ]
        public string LinkStyle
        {
            set { _linkstyle = value; }
            get { return _linkstyle; }
        }

        [
         Bindable(true),
         Category("HGProperty"),
         DefaultValue(""),
         Description("焦点文字样式(页数,记录数,当前页)")
        ]
        public string FocusStyle
        {
            set { _focusstyle = value; }
            get { return _focusstyle; }
        }


        protected override void OnInit(EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                PagerDataBind(1);
            }
           // base.CreateChildControls();
        }

        protected override void CreateChildControls()
        {

            //添加linkbutton
            LinkButton linkbtn1 = new LinkButton();
            linkbtn1.Text = "首页";
            linkbtn1.ID = "Index";
            linkbtn1.Click += new EventHandler(Index_Click);
            linkbtn1.CssClass = _linkstyle;

            LinkButton linkbtn2 = new LinkButton();
            linkbtn2.Text = "上一页";
            linkbtn2.ID = "Pre";
            linkbtn2.Click += new EventHandler(Pre_Click);
            linkbtn2.CssClass = _linkstyle;

            LinkButton linkbtn3 = new LinkButton();
            linkbtn3.Text = "下一页";
            linkbtn3.ID = "Next";
            linkbtn3.Click += new EventHandler(Next_Click);
            linkbtn3.CssClass = _linkstyle;

            LinkButton linkbtn4 = new LinkButton();
            linkbtn4.Text = "末页";
            linkbtn4.ID = "End";
            linkbtn4.Click += new EventHandler(End_Click);
            linkbtn4.CssClass = _linkstyle;

            Literal spanPageCount = new Literal();
            spanPageCount.ID = "PageCount";

            Literal spanRowCount = new Literal();
            spanRowCount.ID = "RowCount";

            Literal spanPIndex = new Literal();
            spanPIndex.ID = "PIndex";

            DropDownList drp = new DropDownList();
            drp.ID = "Drp";
            drp.AutoPostBack = true;
            drp.SelectedIndexChanged += new EventHandler(drp_SelectedIndexChanged);


            Controls.Add(new LiteralControl("<div id='PageDiv' runat=\"Server\" class='" + _pagerstyle + "'>"));
            Controls.Add(new LiteralControl("共<span class='" + _focusstyle + "'>"));
            Controls.Add(spanPageCount);
            Controls.Add(new LiteralControl("</span>页<span class='" + _focusstyle + "'>"));
            Controls.Add(spanRowCount);
            Controls.Add(new LiteralControl("</span>条 当前是第<span class='" + _focusstyle + "'>"));
            Controls.Add(spanPIndex);
            Controls.Add(new LiteralControl("</span>页&nbsp;&nbsp;"));
            Controls.Add(linkbtn1);
            Controls.Add(new LiteralControl("&nbsp;&nbsp;"));
            Controls.Add(linkbtn2);
            Controls.Add(new LiteralControl("&nbsp;&nbsp;"));
            Controls.Add(linkbtn3);
            Controls.Add(new LiteralControl("&nbsp;&nbsp;"));
            Controls.Add(linkbtn4);
            Controls.Add(new LiteralControl("&nbsp;&nbsp;转到第"));
            Controls.Add(drp);
            Controls.Add(new LiteralControl("页</div>"));

            base.CreateChildControls();
        }

        void drp_SelectedIndexChanged(object sender, EventArgs e)
        {
            _pageindex = Convert.ToInt32(((DropDownList)this.FindControl("Drp")).SelectedValue);
            Literal ltr = (Literal)this.FindControl("PIndex");
            ltr.Text = _pageindex.ToString();
            PagerDataBind(_pageindex);
            //throw new NotImplementedException();
        }


        #region linkbutton的click事件

        void Index_Click(object sender, EventArgs e)
        {
            Literal ltr = (Literal)this.FindControl("PIndex");
            DropDownList drp = (DropDownList)this.FindControl("Drp");
            _pageindex = 1;
            ltr.Text = "1";
            drp.SelectedValue = "1";
            PagerDataBind(_pageindex);
        }

        void Pre_Click(object sender, EventArgs e)
        {
            Literal ltr = (Literal)this.FindControl("PIndex");
            _pageindex = Convert.ToInt32(ltr.Text)-1;
            ltr.Text = _pageindex.ToString();
            PagerDataBind(_pageindex);

        }

        void Next_Click(object sender, EventArgs e)
        {
            Literal ltr = (Literal)this.FindControl("PIndex");
            _pageindex = Convert.ToInt32(ltr.Text) + 1;
            ltr.Text = _pageindex.ToString();
            PagerDataBind(_pageindex);

        }

        void End_Click(object sender, EventArgs e)
        {
            Literal ltr = (Literal)this.FindControl("PageCount");
            _pageindex = Convert.ToInt32(ltr.Text);
            ltr.Text = _pageindex.ToString();
            PagerDataBind(_pageindex);
        }

        #endregion

        #region 设计时支持
        /// <summary>
        /// 设计时支持
        /// </summary>
        /// <param name="output"></param>
        protected override void Render(HtmlTextWriter output)
        {
            if ((base.Site != null) && base.Site.DesignMode)
            {
                output.Write("<div style='font-size: 12px; '>共3页9条 当前是第2页 首页 上一页 下一页 末页 转到第页</div>");
            }
            else
            {
                //output.Write("<div id='" + this.ClientID + "Page' style='TEXT-ALIGN: center;width:90%'>");
                if (_pagecount > 1)
                {
                    base.Render(output);
                }
                //output.Write("</div>");
            }

        }
        #endregion


        //public override void DataBind() {
          

        //}


        private void PagerDataBind(int intpageindex) {
            SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings[_constrkey].ToString());
            con.Open();
            SqlCommand cmd = new SqlCommand(GetSqlStr(intpageindex), con);
            SqlDataReader dr = cmd.ExecuteReader();
            int i = 0;
            switch (_viewcontroltype)
            {
                case ControlType.Repeater:
                    ((Repeater)Parent.FindControl(_controlname)).DataSource = dr;
                    ((Repeater)Parent.FindControl(_controlname)).DataBind();
                    break;
                case ControlType.DataList:
                    ((DataList)Parent.FindControl(_controlname)).DataSource = dr;
                    ((DataList)Parent.FindControl(_controlname)).DataBind();
                    break;
                case ControlType.GridView:
                    ((GridView)Parent.FindControl(_controlname)).DataSource = dr;
                    ((GridView)Parent.FindControl(_controlname)).DataBind();
                    break;
            }
            dr.Close();
            dr.Dispose();

            string sql2 = "";
            if (_wherestr != null)
            {
                sql2 = " Where " + _wherestr;
            }
            SqlCommand cmd2 = new SqlCommand("Select Count(ID) From " + _tablename + sql2, con);
            i = Convert.ToInt32(cmd2.ExecuteScalar());
            con.Close();
            con.Dispose();
            _rowcount = i;
            if ((_rowcount % _pagesize) == 0)
            {
                _pagecount = Convert.ToInt32(_rowcount / _pagesize);
            }
            else
            {
                _pagecount = Convert.ToInt32(_rowcount / _pagesize) + 1;
            }
            _pageindex = intpageindex;


            LinkButton lIndex=(LinkButton)this.FindControl("Index");
            LinkButton lPre=(LinkButton)this.FindControl("Pre");
            LinkButton lNext=(LinkButton)this.FindControl("Next");
            LinkButton lEnd=(LinkButton)this.FindControl("End");

            lIndex.Visible = true;
            lIndex.Enabled = true;
            lPre.Visible = true;
            lNext.Visible = true;
            lEnd.Visible = true;
            lEnd.Enabled = true;
            if (intpageindex == 1) {
                lPre.Visible = false;
                lIndex.Enabled = false;
            }
            if (intpageindex == _pagecount) {
                lNext.Visible = false;
                lEnd.Enabled = false;
            }

            ((Literal)this.FindControl("PageCount")).Text=_pagecount.ToString();
            ((Literal)this.FindControl("RowCount")).Text = _rowcount.ToString();
            ((Literal)this.FindControl("PIndex")).Text = _pageindex.ToString();

            //绑定DropDownList
            if (!Page.IsPostBack)
            {
                DropDownList drp = (DropDownList)this.FindControl("Drp");
                for (int j = 1; j <= _pagecount; j++)
                {
                    drp.Items.Add(j.ToString());
                }
            }

        }

        private string GetSqlStr(int pageindex)
        {
            System.Text.StringBuilder sb = new StringBuilder();
            sb.Append("Select Top " + _pagesize + " " + _selectstr + " From " + _tablename);
            string orderby = "";
            if (_orderby != null) {
                orderby = " Order By " + _orderby;
            }


            if (_wherestr == null)
            {
                sb.Append(" Where ID Not In(Select Top " + (pageindex - 1) * _pagesize + " ID From " + _tablename + orderby + ") " + orderby);
            }
            else
            {
                sb.Append(" Where ID Not In(Select Top " + (pageindex - 1) * _pagesize + " ID From " + _tablename + " Where " + _wherestr + orderby + ") and " + _wherestr + orderby);
            }

            return sb.ToString();
        }

   }
}

0 0
原创粉丝点击