DevExpress 用户控件 分页

说明:使用用户控件分页,完成后,使用时非常简单,数据绑定,调用自己写的一个事件就OK了

一、前期准备工作:

(1)添加一个用户控件 命名PageCtrl

(2)打开代码:  
    //引用  
    using DevExpress.XtraEditors;  
    //窗体继承  
    public partial class PageCtrl : DevExpress.XtraEditors.XtraUserControl  

(3)设置窗体属性

AutoScaleMode=None;

Size=500,25

(4)拖一个 DataNavigator控件,设置属性

1>Buttons 下的

Append -> Visible  =False

其他的例:CancelEdit,EndEdit,First,Next,Prev,Remove...都一样

2>设置Buttons下的CustomButtons 

添加四个按钮,修改ImageIndex,Tag

3>Dock=Right

(5)拖一个LableControl控件,设置属性

Appearance -> TextOptions ->HAlignment =Far

AutoSizeMode =None

Dock=Fill

Text =第0页 共0页
主要显示当前页面信息根据需求增减
(6)拖一个comboBox控件,设置属性,用来显示页面每页显示的数量
textEditStyle=DisableTextEditor //设置控件不可编辑
text=50 //给控件初始值
(7)调整整体布局,依个人或业务需求调整 (8)重新生成解决方案,工具栏会有一个PageCtrl控件,拖到界面上即可

   界面如图所示:

 

 

  设计界面如下:

 

 

 

 二、后台代码:

1)具体调用请关注 看DevExpress 用户控件 分页(下)

datanavi_ButtonClick 是DataNavigator的ButtonClikc事件

视图设计器:

 

 

 

 

 

 

分页用户控件后台代码如下:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
 
namespace demo
{
    /// <summary>
    /// 分页控制
    /// </summary>
    public partial class PageCtrl : XtraUserControl
    {
        /// <summary>
        /// 自定义事件 当前页改变事件
        /// </summary>
        public event EventHandler CurrentPageChange;

        #region 定义分页 字段和属性

        private int m_recordCount = 0;
        /// <summary>
        /// 数据行总数
        /// </summary>
        public int recordCount
        {
            get { return m_recordCount; }
            set
            {
                SetFormCtrlEnable();
                this.m_recordCount = value;
            }
        }

        private int m_pageSize = 50;
        /// <summary>
        /// 每页显示的数据行数
        /// </summary>
        public int pageSize
        {
            get { return m_pageSize; }
            set { this.m_pageSize = value; }
        }

        private int m_pageIndex = 1;
        /// <summary>
        /// 当前页
        /// </summary>
        public int pageIndex
        {
            get { return m_pageIndex; }
            set { this.m_pageIndex = value; }
        }

        private int m_pageCount = 0;
        /// <summary>
        /// 总页数
        /// </summary>
        public int pageCount
        {
            get
            {
                if (m_pageSize != 0)
                {
                    m_pageCount = GetPageCount();
                }
                return m_pageCount;
            }
        }

        /// <summary>
        /// 获取总页数
        /// </summary>
        /// <returns></returns>
        private int GetPageCount()
        {
            if (pageSize == 0)
            {
                return 0;
            }
            int num = 1;
            if (recordCount % pageSize == 0)
            {
                num = recordCount / pageSize;
            }
            else
            {
                num = recordCount / pageSize + 1;
            }
            return num;
        }
        #endregion

        public PageCtrl()
        {
            InitializeComponent();

            m_pageSize = int.Parse(com_pageSize.Text.Trim());
        }

        /// <summary>
        /// 设置DataNavigator按钮全部可用
        /// </summary>
        private void SetFormCtrlEnable()
        {
            this.datanavi.Buttons.CustomButtons[0].Enabled = true;
            this.datanavi.Buttons.CustomButtons[1].Enabled = true;
            this.datanavi.Buttons.CustomButtons[2].Enabled = true;
            this.datanavi.Buttons.CustomButtons[3].Enabled = true;
        }

        //DataNavigator 点击      
        private void datanavi_ButtonClick(object sender, NavigatorButtonClickEventArgs e)
        {
            ShowEvent("ButtonClick", e.Button);
        }

        #region 第一页、上一页、下一页、最后一页
        /// <summary>
        /// 第一页、上一页、下一页、最后一页 点击事件
        /// </summary>
        /// <param name="eventString"></param>
        /// <param name="nbb"></param>
        void ShowEvent(string eventString, NavigatorButtonBase nbb)
        {
            switch (nbb.Tag.ToString())
            {
                case "First"://第一页
                    First();
                    break;
                case "PrePage"://上一页
                    PrePage();
                    break;
                case "NextPage"://下一页
                    NextPage();
                    break;
                case "Last"://最后一页
                    Last();
                    break;
                default:
                    break;
            }
            DrawControl(true);
        }

        private void First()
        {
            m_pageIndex = 1;

            //num_pageNum.Value = 1;
        }
        private void PrePage()
        {
            m_pageIndex = Math.Max(1, m_pageIndex - 1);

            // num_pageNum.Value = m_pageIndex;
        }
        private void NextPage()
        {
            m_pageIndex = Math.Min(pageCount, m_pageIndex + 1);

            // num_pageNum.Value = m_pageIndex;
        }
        private void Last()
        {
            m_pageIndex = pageCount;

            // num_pageNum.Value = m_pageIndex;
        }
        #endregion

        /// <summary>
        /// 设置DataNavigator按钮是否可用
        /// </summary>
        /// <param name="callEvent">是否当前页</param>
        private void DrawControl(bool callEvent)
        {
            if (callEvent && CurrentPageChange != null)
            {
                //当前页事件
                CurrentPageChange(this, null);
            }
            //设置按钮全部可用
            this.SetFormCtrlEnable();
            //只有一页
            if (recordCount <= 1)
            {
                this.datanavi.Buttons.CustomButtons[0].Enabled = false;
                this.datanavi.Buttons.CustomButtons[1].Enabled = false;
                this.datanavi.Buttons.CustomButtons[2].Enabled = false;
                this.datanavi.Buttons.CustomButtons[3].Enabled = false;

                //if (com_pageSize.Text == "0")
                //    pageIndex = 1;
            }
            else if (pageCount <= 1)
            {
                this.datanavi.Buttons.CustomButtons[0].Enabled = false;
                this.datanavi.Buttons.CustomButtons[1].Enabled = false;
                this.datanavi.Buttons.CustomButtons[2].Enabled = false;
                this.datanavi.Buttons.CustomButtons[3].Enabled = false;
            }//第一页
            else if (pageIndex <= 1)
            {
                this.datanavi.Buttons.CustomButtons[0].Enabled = false;
                this.datanavi.Buttons.CustomButtons[1].Enabled = false;
            }//最后一页
            else if (pageIndex >= pageCount)
            {
                this.datanavi.Buttons.CustomButtons[2].Enabled = false;
                this.datanavi.Buttons.CustomButtons[3].Enabled = false;
            }

        }

        /// <summary>
        /// 加载LableControl
        /// </summary>
        private void ShowLableInfo()
        {
            if (!this.Created)
            {
                return;
            }
            this.BeginInvoke((MethodInvoker)delegate
            {
                try
                {
                    if (!DesignMode)
                    {
                        //记录第几页总条数
                        int num1 = 0;
                        //当前从第几条显示
                        int num2 = 0;

                        if (recordCount <= 0) { num1 = 0; num2 = 0; }
                        else
                        {
                            switch (pageIndex)
                            {
                                case 0:
                                    num1 = 0; num2 = 0;
                                    break;
                                case 1:
                                    if (pageCount > 1)
                                    {
                                        //总页数大于当前页,当前页等于1
                                        num2 = 1;
                                        num1 = pageSize;
                                    }
                                    else
                                    {
                                        num2 = 1;
                                        num1 = recordCount;
                                    }
                                    break;
                                case -1:
                                    num1 = 0; num2 = 0;
                                    break;
                                default:
                                    if (pageIndex < pageCount)
                                    {
                                        //总页数大于当前页,当前页大于1
                                        num2 = pageSize * (pageIndex - 1) + 1;
                                        num1 = pageSize * pageIndex;
                                    }
                                    else
                                    {
                                        num2 = pageSize * (pageIndex - 1) + 1;
                                        num1 = recordCount;
                                    }
                                    break;
                            }
                        }

                        this.pageTotal.Text = "   第 " + pageIndex + " 页  共 " + pageCount + " 页";
                        this.total.Text = "当前显示 " + num2 + "—" + num1 + " 条记录 共 " + recordCount + "条记录  ";
                    }
                }
                catch { }
            });
        }

        /// <summary>
        /// 分页控件加载
        /// </summary>
        /// <param name="count">数据总行数</param>
        private void DrawControl(int count)
        {
            m_recordCount = count;
            //设置DataNavigator
            DrawControl(false);
            //设置LabControl
            ShowLableInfo();
        }

        /// <summary>
        /// 设置分页数据控件
        /// </summary>
        /// <param name="currentPageIndex">当前页</param>
        /// <param name="pageSize2">每页显示行数</param>
        /// <param name="recordTotal">总行数</param>
        public void SetPageCtrl(int currentPageIndex, int pageSize2, int recordTotal)
        {
            pageIndex = currentPageIndex <= 0 ? 1 : currentPageIndex;
            recordCount = recordTotal;
            pageSize = pageSize2;

            DrawControl(recordTotal);
        }

        /// <summary>
        /// 页大小
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void com_pageSize_TextChanged(object sender, EventArgs e)
        {
            this.pageSize = int.Parse(com_pageSize.Text);
            this.pageIndex = 1;
        }
        
    }
}

 

 三、分页控件调用

分页控件调用

(1)数据绑定时:

    从数据库中获取实时的

    Public void LoadData(){

               //这是只写有关分页的部分 DSMain为执行存储过程活动的Dataset

                int aa = int.Parse(DSMain.Tables[1].Rows[0]["PageIndex"].ToString());
                int bb = int.Parse(DSMain.Tables[1].Rows[0]["RecordTotal"].ToString());
                this.pageCtrl1.SetPageCtrl(aa, pageCtrl1.pageSize, bb);

    }

(2)webAPI条用方法时:

  给后台方法提供pageSize(页显示条数)、pageNum(第几页)

  后台返回recordCounts(总条数)

  调用分页控件 pageCtrl1.SetPageCtrl(pageNum, pageSize, recordCounts);

(3)调用用户自定义事件 CurrentPageChange:

     private void pageCtrl1_CurrentPageChange(object sender, EventArgs e)
        {
            LoadData();
        }

界面展示:

 

 

posted @ 2020-10-27 17:06  乡野小猫  阅读(1040)  评论(0)    收藏  举报