我们何不把这分页功能给封装起来呢?
让我们来分析一下分页的封装到底要实现那些功能:
- 数据显示控件不应该关心“页”的问题,因为它的功能是显示数据,你只需要把它要显示的数据给它就行了;
- 你必须承认分页的独立性,它与任何显示控件物理上是隔离的,所以我们在设计该控件时不应该考虑任何数据显示控件;
- 分页控件需要维护一个“当前页”、“页大小”的上下文;
- 要确定分页控件的数据无关性(这里的“数据”指的是在数据显示控件中显示的数据),数据显示控件的数据源应该由系统的“业务层”提供, 而业务层的数据提供服务所查询的具体数据有分页控件的“当前页”、“页大小”确定(如: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 /// 获取或设置分页的大小,默认值10
83 /// </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 /// 获取或设置分页导航条中显示的页码数量,默认10
97 /// </summary>
98 [Category("Behavior")]
99 [Description("分页中要显示的页码数量")]
100 public int NumberCount {
101 get {
102 return _numberCount;
103 }
104 set {
105 _numberCount = value;