我们何不把这分页功能给封装起来呢?
让我们来分析一下分页的封装到底要实现那些功能:
- 数据显示控件不应该关心“页”的问题,因为它的功能是显示数据,你只需要把它要显示的数据给它就行了;
- 你必须承认分页的独立性,它与任何显示控件物理上是隔离的,所以我们在设计该控件时不应该考虑任何数据显示控件;
- 分页控件需要维护一个“当前页”、“页大小”的上下文;
- 要确定分页控件的数据无关性(这里的“数据”指的是在数据显示控件中显示的数据),数据显示控件的数据源应该由系统的“业务层”提供, 而业务层的数据提供服务所查询的具体数据有分页控件的“当前页”、“页大小”确定(如:GetData(int pageIndex,int pageSize););
- 分页控件必须能够维护当前页面的参数;
- 分页控件能够维护统一的风格(由用户指定显示样式,否则就显示默认样式)。
首先实现的是SimplePaper维护的数据及属性,每个属性的描述这里就不再详述了
1
private string _class;2
private int _pageSize = 10;3
private int _numberCount = 10;4
private int _virtualCount = 0;5

6
private string _prevText = "上一页";7
private string _nextText = "下一页";8
private string _firstText = "第一页";9
private string _lastText = "最末页";10

11 /// <summary>
12
/// 获取或设置控件关联的样式类13
/// </summary>14
[Category("Behavior")]15
[Description("Css的样式类名称")]16 public string Class {
17 get {
18
return _class;19
}20 set {
21
_class = value;22
}23
}24

25 /// <summary>
26
/// 获取或设置“上一页”在分页导航条中显示的文本,默认值“上一页”27
/// </summary>28
[Category("Behavior")]29
[Description("上一页文本")]30 public string PrevText {
31 get {
32
return _prevText;33
}34 set {
35
_prevText = value;36
}37
}38

39 /// <summary>
40
/// 获取或设置“下一页”在分页导航条中显示的文本,默认值“下一页”41
/// </summary>42
[Category("Behavior")]43
[Description("下一页文本")]44 public string NextText {
45 get {
46
return _nextText;47
}48 set {
49
_nextText = value;50
}51
}52

53 /// <summary>
54
/// 获取或设置“第一页”在分页导航条中显示的文本,默认值“第一页”55
/// </summary>56
[Category("Behavior")]57
[Description("第一页文本")]58 public string FirstText {
59 get {
60
return _firstText;61
}62 set {
63
_firstText = value;64
}65
}66

67 /// <summary>
68
/// 获取或设置“最末页”在分页导航条中显示的文本,默认值“最末页”69
/// </summary>70
[Category("Behavior")]71
[Description("最末页文本")]72 public string LastText {
73 get {
74
return _lastText;75
}76 set {
77
_lastText = value;78
}79
}80
81 /// <summary>
82
/// 获取或设置分页的大小,默认值1083
/// </summary>84
[Category("Behavior")]85
[Description("页大小")]86 public int PageSize {
87 get {
88
return _pageSize;89
}90 set {
91
_pageSize = value;92
}93
}94

95 /// <summary>
96
/// 获取或设置分页导航条中显示的页码数量,默认1097
/// </summary>98
[Category("Behavior")]99
[Description("分页中要显示的页码数量")]100 public int NumberCount {
101 get {
102
return _numberCount;103
}104 set {
105
_numberCount = value;