效果如图:
首先在项目中添加用户控件:
用户控件中添加属性和系统方法,则会在控制面板中可以更改属性和添加控件事件,分页控件这里定义两个属性,每页显示记录数和当前页数,当改变当前页数时,将触发事件,代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar.Controls;
using System.Data.SqlClient;
namespace BaseForm.UserControls
{
public partial class PageBar : UserControl
{
public event EventHandler PageChanged; //事件:控件的当前页码发生变更。
/// <summary>
/// PageBar分页控件所关联的DataGridView数据控件,当PageBar分页控件执行DataBind()数据绑定
/// 方法时,PageBar分页控件会自动将分页后的数据,绑定给关联的DataGridView控件进行显示。
/// </summary>
public DataGridViewX DataControl //这里因为使用了第三方界面控件DotNetBar, 所以为DataGridViewX
{
get;
set;
}
/// <summary>
/// PageBar分页控件的数据源,数据源为数据实体层中所定义的PageData类型。
/// </summary>
public PageData DataSource
{
get;
set;
}
/// <summary>
/// 控件实例化方法
/// </summary>
public PageBar()
{
InitializeComponent();
}
/// <summary>
/// 进行数据绑定,将数据源中的IList类型数据,绑定给关联的数据控件进行显示。
/// </summary>
public void DataBind()
{
if (DataSource == null) return;
labNumber.Text= "共" + DataSource.RecordCount.ToString() + "条记录,每页" + DataSource.PageSize.ToString() + "条,共"+DataSource.PageCount.ToString()+"页";//为用户控件的Label赋值
txtCurPage.Text= DataSource.CurPage.ToString();//当前页数
DataControl.AutoGenerateColumns = false;
DataControl.DataSource = DataSource.PageList.Tables[0].DefaultView;//绑定DataGridiew
}
/// <summary>
/// 用户单击“首页”按钮时的事件处理方法。
/// </summary>
private void btnFirstPage_Click(object sender, EventArgs e)
{
CurPage = 1;
}
/// <summary>
/// 用户单击“上一页”按钮时的事件处理方法。
/// </summary>
private void btnPrePage_Click(object sender, EventArgs e)
{
CurPage = DataSource.PrevPage;
}
/// <summary>
/// 用户单击“下一页”按钮时的事件处理方法。
/// </summary>
private void btnNextPage_Click(object sender, EventArgs e)
{
CurPage = DataSource.NextPage;
}
/// <summary>
/// 用户单击“最后一页”按钮时的事件处理方法。
/// </summary>
private void btnLastPage_Click(object sender, EventArgs e)
{
CurPage = DataSource.PageCount;
}
#region PageBar控件的相关变量及属性定义
private int pageSize;
private int curPage;
/// <summary>
/// 每页显示记录数。
/// </summary>
public int PageSize
{
get
{
if (pageSize <= 0)
{
pageSize = 10;
}
return pageSize;
}
set
{
pageSize = value;
}
}
/// <summary>
/// 当前页数
/// </summary>
public int CurPage
{
get
{
if (curPage <= 0)
{
curPage = 1;
}
return curPage;
}
set
{
curPage = value;
if (PageChanged != null)
{
PageChanged(this, null);//触发当件页码变更事件。
}
}
}
#endregion
}
}
PageData类是用户控件需要赋值的一些属性,即数据实体层,代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Data;
namespace BaseForm.UserControls
{
/// <summary>
/// 对象名称:数据分页实体类(数据实体层)
/// 对象说明:主要用于数据访问层与用户界面层中的PageBar分页控件进行数据交互。
/// </summary>
public class PageData
{
/// <summary>
/// [属性]分页过后的数据。
/// </summary>
public DataSet PageList
{
get;
set;
}
/// <summary>
/// [属性]每页显示记录数。
/// </summary>
public int PageSize
{
get;
set;
}
/// <summary>
/// [属性]所请求的当前页数。
/// </summary>
public int CurPage
{
get;
set;
}
/// <summary>
/// [属性]总页数。
/// </summary>
public int PageCount
{
get;
set;
}
/// <summary>
/// [属性]总记录数。
/// </summary>
public int RecordCount
{
get;
set;
}
/// <summary>
/// [属性]相对于当前页的上一页
/// </summary>
public int PrevPage
{
get
{
if (CurPage > 1)
{
return CurPage - 1;
}
return 1;
}
}
/// <summary>
/// [属性]相对于当前页的下一页
/// </summary>
public int NextPage
{
get
{
if (CurPage < PageCount)
{
return CurPage + 1;
}
return PageCount;
}
}
}
}
下面是数据访问层代码:
/// <summary>
/// 返回数据列表
/// </summary>
/// <param name="intSta">起始位置</param>
/// <param name="intNum">数据个数</param>
public DataSet GetList(int intSta, int intNum)
{
using (SqlConnection sqlConnection = GetNewConnection())
{
string sqlText = "select * from [OfficeRibbon] order by id desc";
SqlDataAdapter adapter = new SqlDataAdapter(sqlText, sqlConnection);
DataSet dataset = new DataSet();
adapter.Fill(dataset, intSta, intNum, "datasource");
return dataset;
}
}
/// <summary>
/// 返回分页数据
/// </summary>
public PageData GetPageList(int pageSize, int curPage)
{
PageData pageData = new PageData();
pageData.PageSize = pageSize;
pageData.CurPage = curPage;
pageData.RecordCount = ExecuteScalar();
pageData.PageCount = 1;
if (pageData.RecordCount > 0)
pageData.PageCount = Convert.ToInt32(Math.Ceiling((double)pageData.RecordCount / (double)pageSize));
pageData.PageList = GetList((curPage - 1) * pageSize, pageSize);
return pageData;
}
然后编译生成,在工具箱里就出现了用户控件,我们可以直接拖一个DatagridView控件和PageBar用户控件在窗体上引用的代码为:
public partial class EditFrm : Office2007Form
{
public EditFrm()
{
InitializeComponent();
BindDataGrid();
}
/// <summary>
/// 对DataGridView控件的数据源进行绑定。
/// </summary>
public void BindDataGrid()
{
OfficeRibbonBLL officeRibbonBll = new OfficeRibbonBLL();
pageBar1.DataControl = dataGridView;
pageBar1.DataSource = officeRibbonBll.GetPageList(pageBar1.PageSize,pageBar1.CurPage);
pageBar1.DataBind();
}
private void pageBar1_PageChanged(object sender, EventArgs e)
{
BindDataGrid(); //重新对DataGridView控件的数据源进行绑定。
}
}