两种分页控件的实现
最近因项目需要,封装了两个分页控件。两个分页控件的工作机制相同,只是界面风格不同。现在拿来和大家分享一下。如果大家有什么好的意见和建议,欢迎指正。
分页控件采用UserControl的形式进行封装,主要维护记录总数,每页行数和当前页索引等数据,提供翻页事件供用户进行订阅和实现。和列表控件分离确保了分页控件的可移植性,可以支持和多种列表的结合。
第一个控件参考了PDF阅读器的风格,提供首页、上一页、下一页和尾页按钮进行翻页操作,另外,用户还可以选择下拉框页数跳转到指定页。同时记录总页数、总记录数和每页行数等信息。界面如下图:
第二种控件和B/S中分页控件的风格相似,也更复杂一些。除提供第一中控件的功能外,同时提供修改每页行数接口。界面如下图:
分页控件类中主要的属性、事件和方法。
属性
<summary>
/// 当前页索引,默认值是1
/// </summary>
public int CurrentPageIndex
{
get { return currentPageIndex; }
set
{
if (value <= 0 || value > totalPages)
{
//throw new ArgumentOutOfRangeException();
}
currentPageIndex = value;
}
}
/// <summary>
/// 总记录数
/// </summary>
public int TotalRecords
{
get { return totalRecords; }
set { totalRecords = value; }
}
/// <summary>
/// 每页显示的记录数,默认值是20
/// </summary>
public int PageSize
{
get { return pageSize; }
set
{
if (value < 0 || value > totalRecords)
{
//throw new ArgumentOutOfRangeException();
}
pageSize = value;
}
}
翻页事件
public delegate void CurrentPageEventHandler(PagingEventArgs e);
public event CurrentPageEventHandler CurrentPageEvent;
定义翻页事件参数类,保证了事件的可扩展性
/// <summary>
/// 翻页页事件参数
/// </summary>
public sealed class PagingEventArgs : EventArgs
{
#region 属性
/// <summary>
/// 当前页索引
/// </summary>
public int CurrentPageIndex
{
get { return currentPageIndex; }
set { currentPageIndex = value; }
}
/// <summary>
/// 每页行数
/// </summary>
public int PageSize
{
get { return pageSize; }
set { pageSize = value; }
}
#endregion
...
}
提供SetParams方法,供用户设置记录总数和每页行数等参数。
public void SetParams(int totalRecords, int pageSize);
分页控件的使用和普通控件一样,将控件拖放到合适的位置,设置相关参数,订阅并实现翻页事件就可以了。具体的分页查询的实现,网上很多,就不啰嗦了。
实现代码,可以到这里下载。