GridView分页显示(笔记)

GridView分页显示(笔记)

namespace jzlib.asp.net.Controls
{
    public enum DisplayType //枚举类型
    {
        DropDownList,
        TextBoxAndButton
       
    }
    public enum Position
    {
        Top,
        Bottom
    }
 
    [TypeConverter(typeof(ExpandableObjectConverter))]
    public class CustomPageSetting : CustomSetting, IStateManager
    {
        #region private fields
        private bool _aotuPage;
        private bool _customSupport;
        private StateBag _statebag;
        private string _message;
        private TableItemStyle _customPageRowStyle;
        private const string CustomePagingKey = "CustomePaging";
        private DisplayType _displayType = DisplayType.DropDownList;
        private Position _pos = Position.Top;
        #endregion
        public CustomPageSetting()
        {
            this._statebag = new StateBag(false);
        }
        protected override void RegisterGridViewEvent()
        {
            if (Owner != null)
            {
                if (this._aotuPage)
                {
                    Owner.AllowPaging = true;
                }
                Owner.PageIndexChanging += new System.Web.UI.WebControls.GridViewPageEventHandler(Owner_PageIndexChanging);

                Owner.CreateCustomPageRowEvent += new CreateCustomPageRowHandler(Owner_CreateCustomPageRowEvent);
                Owner.OnBindComplete += new BindCompleteHander(Owner_OnBindComplete);


            }
        }

        void Owner_OnBindComplete(DataTable dataSource)
        {
            if (!_customSupport)
            {
                return;
            }
            if (dataSource == null)
            {
                return;
            }
            //分页
            int page_Size = Owner.PageSize;
            int page_Count = Owner.PageCount;
            int page_Current = Owner.PageIndex + 1;
            for (int i = 1; i <= page_Count; i++)
            {
                pageList.Items.Add(new ListItem("第" + i.ToString() + "页", i.ToString()));
            }
            pageList.SelectedValue = page_Current.ToString();
            pageBox.Text = page_Current.ToString();
            lblRowsCount.Text = dataSource.Rows.Count.ToString();
            lblPageCount.Text = page_Count.ToString();
            lblCurrentPage.Text = page_Current.ToString();

            #region 显示页导航

            btnFirst.Enabled = true;
            btnPrev.Enabled = true;
            btnNext.Enabled = true;
            btnLast.Enabled = true;

            if (Owner.PageIndex == 0)
            {
                btnFirst.Enabled = false;
                btnPrev.Enabled = false;
                if (page_Count == 0)
                {
                    btnNext.Enabled = false;
                    btnLast.Enabled = false;
                }
                if (Owner.PageCount == 1)
                {
                    btnLast.Enabled = false;
                    btnNext.Enabled = false;
                }
            }
            else if (Owner.PageIndex == Owner.PageCount - 1)
            {
                btnLast.Enabled = false;
                btnNext.Enabled = false;
            }
            #endregion
        }
        #region NavigateToPage
        public void NavigateToPage(object sender, CommandEventArgs e)
        {
            btnFirst.Enabled = true;
            btnPrev.Enabled = true;
            btnNext.Enabled = true;
            btnLast.Enabled = true;
            switch (e.CommandArgument.ToString())
            {
                case "Prev":
                    if (Owner.PageIndex > 0)
                    {
                        Owner.PageIndex -= 1;

                    }
                    break;
                case "Next":
                    if (Owner.PageIndex < (Owner.PageCount - 1))
                    {
                        Owner.PageIndex += 1;

                    }
                    break;
                case "First":
                    Owner.PageIndex = 0;
                    break;
                case "Last":
                    Owner.PageIndex = Owner.PageCount - 1;
                    break;
            }
            if (Owner.PageIndex == 0)
            {
                btnFirst.Enabled = false;
                btnPrev.Enabled = false;
                if (Owner.PageCount == 1)
                {
                    btnLast.Enabled = false;
                    btnNext.Enabled = false;
                }
            }
            else if (Owner.PageIndex == Owner.PageCount - 1)
            {
                btnLast.Enabled = false;
                btnNext.Enabled = false;
            }
            Owner.OnBind();
        }
        #endregion
        [Description("自定义分页行的样式"), Category("jillzhang扩展"), DefaultValue((string)null),
     DesignerSerializationVisibility(DesignerSerializationVisibility.Content), NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty)]
        public TableItemStyle CusPageRowStyle
        {
            get
            {
                if (this._customPageRowStyle == null)
                {
                    this._customPageRowStyle = new TableItemStyle();

                    ((IStateManager)this._customPageRowStyle).TrackViewState();

                }
                return this._customPageRowStyle;
            }
        }
        Label lblCurrentPage;
        Label lblPageCount;
        Label lblRowsCount;
        LinkButton btnFirst;
        LinkButton btnPrev;
        LinkButton btnNext;
        LinkButton btnLast;
        DropDownList pageList;
        TextBox pageBox;
        Button confimBtn;
        void Owner_CreateCustomPageRowEvent(System.Web.UI.WebControls.Table table, System.Web.UI.WebControls.GridViewRow row)
        {
            if (!_customSupport)
            {
                return;
            }
            lblCurrentPage = new Label();
            lblCurrentPage.ForeColor = ColorTranslator.FromHtml("#e78a29");
            lblCurrentPage.Text = "1";

            lblPageCount = new Label();
            lblPageCount.Text = "1";


            lblRowsCount = new Label();
            lblRowsCount.ForeColor = ColorTranslator.FromHtml("#e78a29");

            btnFirst = new LinkButton();
            btnFirst.Text = "首页";
            btnFirst.Command += new CommandEventHandler(NavigateToPage);
            btnFirst.CommandName = "Pager";
            btnFirst.CommandArgument = "First";
            btnFirst.CausesValidation = false;

            btnPrev = new LinkButton();
            btnPrev.Text = "上一页";
            btnPrev.Command += new CommandEventHandler(NavigateToPage);
            btnPrev.CommandName = "Pager";
            btnPrev.CommandArgument = "Prev";
            btnPrev.CausesValidation = false;

            btnNext = new LinkButton();
            btnNext.Text = "下一页";
            btnNext.Command += new CommandEventHandler(NavigateToPage);
            btnNext.CommandName = "Pager";
            btnNext.CommandArgument = "Next";
            btnNext.CausesValidation = false;

            btnLast = new LinkButton();
            btnLast.Text = "尾页";
            btnLast.Command += new CommandEventHandler(NavigateToPage);
            btnLast.CommandName = "Pager";
            btnLast.CommandArgument = "Last";
            btnLast.CausesValidation = false;

            pageList = new DropDownList();
            pageList.AutoPostBack = true;
            pageList.SelectedIndexChanged += new EventHandler(pageList_SelectedIndexChanged);

            pageBox = new TextBox();
            pageBox.ID = "PageBox_Jillzhang";
            pageBox.Width = 40;

            confimBtn = new Button();
            confimBtn.Text = "转到";
            confimBtn.Click += new EventHandler(confimBtn_Click);

 

            row.MergeStyle(_customPageRowStyle);
            TableCell cell = CreateCustomPageCell();
            Literal l1 = new Literal();
            l1.Text = "页次:";
            cell.Controls.Add(l1);
            cell.Wrap = false;
            cell.Controls.Add(lblCurrentPage);
            l1 = new Literal();
            l1.Text = "页/";
            cell.Controls.Add(l1);
            cell.Controls.Add(lblPageCount);
            l1 = new Literal();
            l1.Text = "页,共";
            cell.Controls.Add(l1);
            cell.Controls.Add(lblRowsCount);
            l1 = new Literal();
            l1.Text = "条记录";
            cell.Controls.Add(l1);
            l1 = new Literal();
            l1.Text = " [";
            cell.Controls.Add(l1);
            cell.Controls.Add(btnFirst);
            l1 = new Literal();
            l1.Text = "] ";
            cell.Controls.Add(l1);

            l1 = new Literal();
            l1.Text = " [";
            cell.Controls.Add(l1);
            cell.Controls.Add(btnPrev);
            l1 = new Literal();
            l1.Text = "] ";
            cell.Controls.Add(l1);

            l1 = new Literal();
            l1.Text = " [";
            cell.Controls.Add(l1);
            cell.Controls.Add(btnNext);
            l1 = new Literal();
            l1.Text = "] ";
            cell.Controls.Add(l1);

            l1 = new Literal();
            l1.Text = " [";
            cell.Controls.Add(l1);
            cell.Controls.Add(btnLast);
            l1 = new Literal();
            l1.Text = "] ";
            cell.Controls.Add(l1);
            l1 = new Literal();
            l1.Text = " &nbsp;转到:";
            cell.Controls.Add(l1);
            if (_displayType == DisplayType.DropDownList)
            {
                cell.Controls.Add(pageList);
            }
            else
            {
                cell.Controls.Add(pageBox);
                cell.Controls.Add(confimBtn);
            }
            row.Cells.Add(cell);
            if (_pos == Position.Top)
            {
                table.Rows.AddAt(0, row);
            }
            else
            {
                table.Rows.Add(row);
            }
        }

        void confimBtn_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            if (btn != null)
            {
                int pageIndex = 0;
                if (!Int32.TryParse(pageBox.Text.Trim(), out pageIndex))
                {
                    pageIndex = 0;
                }
                pageIndex--;
                if (pageIndex < 0)
                {
                    pageIndex = 0;
                }
                Owner.PageIndex = pageIndex;
                Owner.OnBind();
            }
        }

        void pageList_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList list = sender as DropDownList;
            if (list != null)
            {
                int pageIndex = Convert.ToInt32(list.SelectedValue)-1;
                if (pageIndex < 0)
                {
                    pageIndex = 0;
                }
                Owner.PageIndex = pageIndex;
                Owner.OnBind();
            }
        }

        void Owner_PageIndexChanging(object sender, System.Web.UI.WebControls.GridViewPageEventArgs e)
        {
            if (_aotuPage)
            {
                Owner.PageIndex = e.NewPageIndex;
                Owner.OnBind();
            }
        }
        private TableCell CreateCustomPageCell()
        {
            TableCell cell = new TableCell();
            if (Owner.HeaderRow != null)
            {
                cell.ColumnSpan = Owner.HeaderRow.Cells.Count;
            }
            return cell;
        }
        #region public property
        /// <summary>
        /// 指示是否支持自动分页
        /// </summary>
        [Description("指示是否支持自动分页"), Category("jillzhang扩展"), NotifyParentProperty(true)]
        public bool SelfMotion
        {
            get
            {
                return _aotuPage;
            }
            set
            {
                _aotuPage = value;
            }
        }
        /// <summary>
        /// 指示是否支持自动分页
        /// </summary>
        [Description("显示分页的方式"), Category("jillzhang扩展"), NotifyParentProperty(true)]
        public DisplayType DisplayType
        {
            get
            {
                return _displayType;
            }
            set
            {
                _displayType = value;
            }
        }
        /// <summary>
        /// 显示分页行的位置
        /// </summary>
        [Description("显示分页行的位置"), Category("jillzhang扩展"), NotifyParentProperty(true)]
        public Position Position
        {
            get
            {
                return _pos;
            }
            set
            {
                _pos = value;
            }
        }
        [Description("指示是否支持自定义分页"), Category("jillzhang扩展"), NotifyParentProperty(true)]
        public bool CustomSupport
        {
            get
            {
                return _customSupport;
            }
            set
            {
                _customSupport = value;
            }
        }
        #endregion

        #region 实现IStateManager
        void IStateManager.LoadViewState(object savedState)
        {
            _message = _statebag[CustomePagingKey].ToString();
            if (savedState != null)
            {
                ((IStateManager)_statebag).LoadViewState(savedState);
            }
        }
        object IStateManager.SaveViewState()
        {
            if (!((IDictionary)_statebag).Contains(CustomePagingKey) || _statebag.IsItemDirty(CustomePagingKey))
            {
                _statebag.Clear();
                _statebag.Add(CustomePagingKey, _message);
            }
            return ((IStateManager)_statebag).SaveViewState();

        }
        void IStateManager.TrackViewState()
        {
            ((IStateManager)_statebag).TrackViewState();
        }
        bool IStateManager.IsTrackingViewState
        {
            get
            {
                return ((IStateManager)_statebag).IsTrackingViewState;
            }
        }
        #endregion
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值