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();
}
界面展示:


浙公网安备 33010602011771号