DevExpress 用户控件 分页(中)

说明:

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 CYSoft.TS.UI.StudentInfo
{
    public partial class PageCtrl : DevExpress.XtraEditors.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 = 20;
        /// <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();
        }

        /// <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;
        }
        private void PrePage()
        {
            m_pageIndex = Math.Max(1, m_pageIndex - 1);
        }
        private void NextPage()
        {
            m_pageIndex = Math.Min(pageCount, m_pageIndex + 1);
        }
        private void Last()
        {
            m_pageIndex = pageCount;
        }
        #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;
            }//第一页
            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)
                    {
                        this.labelControl1.Text = "总行数:" + recordCount + "      当前页:" + pageIndex + "/" + pageCount + "    ";
                    }
                }
                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;
            recordCount = recordTotal;
            pageSize = pageSize2;

            DrawControl(recordTotal);

        }

    }
}
时间: 2024-10-10 21:46:26

DevExpress 用户控件 分页(中)的相关文章

DevExpress 用户控件 分页(上)

说明:使用用户控件分页,完成后,使用时非常简单,数据绑定,调用自己写的一个事件就OK了 前期准备工作: (1)添加一个用户控件 命名PageCtrl (2)打开代码:   [csharp] view plaincopyprint? //引用 using DevExpress.XtraEditors; //窗体继承 public partial class PageCtrl : DevExpress.XtraEditors.XtraUserControl (3)设置窗体属性 AutoScaleMo

DevExpress 用户控件 分页(下)

分页控件调用 (1)初始化时: this.pageCtrl1.pageSize = 4; (2)数据绑定时: 从数据库中获取实时的 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][&qu

无边框窗体、用户控件、Timer控件

一.无边框窗体1 最大化.最小化以及关闭按钮制作 实际上就是更换点击前.指向时.点击时的图片 (1)将图片放在该文件夹的Debug中, 获取图片的路径 Application.StartupPath + "\\图片名.类型"(2)若是放在该文件夹的中,Application.StartupPath + "\\..\\..\\images\\图片名.类型" \..\文件夹名称... 向上翻一个文件夹,上面的第一个\是转义 pictureBox2.BackgroundI

devexpress表格控件gridcontrol图片列,按钮列,时间列等特殊列的实现

1.项目中经常会在表格中插入按钮列,图片列,表格列一些非文本的特殊列.如何在devexpress表格控件gridcontrol中实现呢?以下列举一个实现添加图片列,按钮列,时间列,按钮列,开关列的示例,效果图如下: 2.数据代码,其中图片列使用了两种方法,大家可根据自己要求变跟. Image img = Image.FromFile(Application.StartupPath+"\\img\\11111.png");//方法1 //byte[] imgbyte=getImageBy

WPF MVVM 用户控件完成分页

项目中经常会有分页查询的情况,在WPF中我们可以通过用户控件完成分页 一下为分页控件的页面代码, <UserControl x:Class="Foundation.UCtrl.NextPageControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&qu

使用CefSharp 在C#用户控件中嵌入Chrome浏览器使用方法

CEF(Chromium Embedded Framework, 嵌入式Chromium框架)是C/C++开发的库 目前 Google Chrome(Google浏览器),Chromium浏览器,Opera等都是基于CEF为核心,Webkit引擎的浏览器. Xilium.CefGlue是对CEF项目的.net的包装,它是用P/Invoke的方式来调用CEF类库.CEFSharp是用C++/CLI的方式来调用CEF类库的. 原先使用的是Xilium.CefGlue,如果只是单纯在窗口上实现的话是没

VB.Net中用户控件的使用

机房重构时,在界面的制作上有这样一个需要改进的地方.那就是在判断窗体上所有文本框时候为空的时候,弹出提示信息的问题.先看一下原先的代码: <pre name="code" class="vb"> Public Function IsEmptyText(ByVal objs As Form) As Boolean '遍历窗体中所有的控件 For i As Integer = objs.Controls.Count - 1 To 0 Step -1 '判断是

web页面动态加载UserControl,并调用用户控件中的方法来初始化控件

1,HTML页 头部注册: <%@ Register Src="~/WorkLog/WorkLogNewV1/UserControl/CeShiBu.ascx" TagPrefix="UserControl" TagName="CeShiBu"%> <%@ Register Src="~/WorkLog/WorkLogNewV1/UserControl/KaiFaBu.ascx" TagPrefix=&quo

ASP.NET MVC中加载WebForms用户控件(.ascx)

原文:ASP.NET MVC中加载WebForms用户控件(.ascx) 问题背景 博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControls.Calendar),它会为“上一月”.“下一月”的链接生成"__doPostBack()"的js调用,如下图: 目前发现它会带来两个问题: 1. 不支持IE10: 2. 某些电脑不允许执行__doPostBack. 问题提炼 前提: 我们想以最低的成本解决这个问题,也就是对当前代码尽可