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); } }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
DevExpress 用户控件 分页(中)的更多相关文章
- DevExpress 用户控件 分页(上)
说明:使用用户控件分页,完成后,使用时非常简单,数据绑定,调用自己写的一个事件就OK了 前期准备工作: (1)添加一个用户控件 命名PageCtrl (2)打开代码: [csharp] view ...
- DevExpress 用户控件 分页(下)
分页控件调用 (1)初始化时: this.pageCtrl1.pageSize = 4; (2)数据绑定时: 从数据库中获取实时的 Public void LoadData(){ //这是只写有关分页 ...
- Web页面获取用户控件页面中服务器控件的值
用户控件页面后台: public string P_Name{get { return txt_P_name.Value; }set { txt_P_name.Value = value; }} We ...
- 如何在组件(Component中)模拟用户控件(UserControl)中FindForm()?
using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentM ...
- 无边框窗体、用户控件、Timer控件
一.无边框窗体1 最大化.最小化以及关闭按钮制作实际上就是更换点击前.指向时.点击时的图片 (1)将图片放在该文件夹的Debug中,获取图片的路径Application.StartupPath + & ...
- devexpress表格控件gridcontrol图片列,按钮列,时间列等特殊列的实现
1.项目中经常会在表格中插入按钮列,图片列,表格列一些非文本的特殊列.如何在devexpress表格控件gridcontrol中实现呢?以下列举一个实现添加图片列,按钮列,时间列,按钮列,开关列的示例 ...
- 036. asp.netWeb用户控件之五使用用户控件实现分页数据导航
UserDataPager.ascx用户控件代码: <%@ Control Language="C#" AutoEventWireup="true" Co ...
- WPF MVVM 用户控件完成分页
项目中经常会有分页查询的情况,在WPF中我们可以通过用户控件完成分页 一下为分页控件的页面代码, <UserControl x:Class="Foundation.UCtrl.Next ...
- 【转】通用分页用户控件(DataGrid,DataList,Repeater都可以用它来分页)
通用分页控件(DataGrid,DataList,Repeater都可以用它来分页) 1.建立用户控件Pager.ascx 1.1 html </ASP:LABEL></TD> ...
随机推荐
- [简历] PHP 技能关键字列表
本技能关键字列表是从最近招聘PHP的数百份JD中统计出来的,括号中是出现的词频.如果你的简历要投递给有机器(简历分选系统)和不如机器(不懂技术的HR)筛选简历环节的地方,请一定从下边高频关键词中选择5 ...
- C#方法定义和调用-2
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- Android使用SAX解析xml
一.理论准备 SAX采用事件驱动机制来解析XML文档,每当SAX解析器发现文档开始.元素开始.文本.元素结束.文档结束等事件时,就会向外发送一次事件,而开发者则可以通过编写事件监听器处理这些事 ...
- Discuz <= 7.2 SQL注入漏洞详情
在<高级PHP应用程序漏洞审核技术>[1]一文里的"魔术引号带来的新的安全问题"一节里,有 提到通过提取魔术引号产生的“\”字符带来的安全问题,同样这个问题在这里又一次 ...
- Codeforces Round #197 (Div. 2) : C
哎....这次的比赛被安叔骂的好惨! 不行呢,要虐回来: 这道搜索,老是写错,蛋疼啊! 果然是基础没打好! #include<cstdio> using namespace std; ], ...
- 【网络流24题】 No.12 软件补丁问题(最小转移代价 最短路)
[题意] T 公司发现其研制的一个软件中有 n 个错误, 随即为该软件发放了一批共 m 个补丁程序. 每一个补丁程序都有其特定的适用环境, 某个补丁只有在软件中包含某些错误而同时又不包含另一些错误时才 ...
- 李洪强漫谈iOS开发[C语言-028]-sizeof运算符
- 嵌入式C语言之---模块化编程
当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干.你需要和你的小组成员分工合作,一起完成项目,这就要求小组成员各自负责一部分工程.比如你可能只是负责通讯或者显示这一块.这个时候,你就应 ...
- Serif和Sans-serif字体的区别(转)
在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Monospace这一种类,例如在Web中,表示代 ...
- 设置VS2015上关闭和打开tab快捷键
Ctrl+W关闭Tab: Tools > Options > Environment > Keyboard > File.Close > Use new shortcut ...