SortPage 排序和分页

   花了一上午时间,终于写了一个进行排序并且分页的类,下面将代码贴出来,望大家指正。

  1 /* 系统名:SaleManage
2 * 模块名:SortPags
3 * 模块说明:排序分页类(传入DataTable,及相关信息,然后分页,并排序)
4 * 开发者:Peter Luo
5 * 开发时间:2012年4月6日
6 */
7 using System;
8 using System.Collections.Generic;
9 using System.Linq;
10 using System.Text;
11 using System.Data ;
12
13 namespace Sale_Core
14 {
15 public class SortPags
16 {
17 /// <summary>
18 /// 存储传入的数据
19 /// </summary>
20 private DataTable _DtSource = null;
21 private DataView _DvSource = null;
22
23 /// <summary>
24 /// 分页排序类
25 /// </summary>
26 /// <param name="dt">要分页或排序的数据源</param>
27 public SortPags(DataTable dt)
28 {
29 this._DtSource = dt;
30 }
31
32 /// <summary>
33 /// 分页排序类
34 /// </summary>
35 /// <param name="dv">要分页或排序的数据源</param>
36 public SortPags(DataView dv)
37 {
38 this._DvSource = dv;
39 }
40
41 /// <summary>
42 /// 页面总数
43 /// </summary>
44 private int _PageCount;
45
46 /// <summary>
47 /// 每页记录数量
48 /// </summary>
49 private int _PageSiz;
50
51 /// <summary>
52 /// 记录总数
53 /// </summary>
54 private int _RowCount;
55
56 /// <summary>
57      /// 排序类型
58 /// ASC 升序
59 /// DESC 降序
60 /// </summary>
61 private SortType _SortKind;
62
63 /// <summary>
64 /// 记录当前页面Index
65 /// </summary>
66 private int _CurrentPageIndex;
67
68 /// <summary>
69 /// 数据源
70 /// </summary>
71 public DataTable DtSource
72 {
73 get
74 {
75 return _DtSource;
76 }
77 }
78
79 /// <summary>
80 /// 页面数量
81 /// </summary>
82 public int PageCount
83 {
84 get
85 {
86 return _PageCount;
87 }
88 }
89
90 /// <summary>
91 /// 页面显示数量
92 /// </summary>
93 public int PageSize
94 {
95 get
96 {
97 return _PageSiz;
98 }
99 set
100 {
101 _PageSiz = value;
102 }
103 }
104
105 /// <summary>
106 /// 只读、不能写,获取该数据源那数据总数
107 /// </summary>
108 public int RowCount
109 {
110 get
111 {
112 return _RowCount;
113 }
114 }
115
116 public SortType SortKind
117 {
118 get
119 {
120 return _SortKind;
121 }
122 set
123 {
124 _SortKind = value;
125 }
126 }
127
128 /// <summary>
129 /// 记录当前页面Index
130 /// </summary>
131 public int CurrentPageIndex
132 {
133 get
134 {
135 return _CurrentPageIndex;
136 }
137 }
138
139 public DataView Sort(string sortName, SortType sortKind)
140 {
141 return new DataView();
142 }
143
144 /// <summary>
145 /// 获取按照给定字段分页后的制定页,(排序->分页)
146 /// </summary>
147 /// <param name="sortName">传入排序的字段</param>
148 /// <param name="sortKind">排序的类型:SortType.ASC 升序 SortType.DESC 降序</param>
149 /// <param name="pageSize">页面的大小(页面内要显示的记录的数量)</param>
150 /// <param name="currentPageIndex">当前页面的index</param>
151 /// <returns></returns>
152 public DataTable GetCurrentPageSortByFileName(string sortName, SortType sortKind, int pageSize, int currentPageIndex)
153 {
154 if (pageSize == 0)
155 return DtSource;//如果没有填写pagesize那么返回整个数据源
156 if (currentPageIndex <= 0)
157 return DtSource; //如果没有传入当前页面index,则返回整个数据源
158 if (sortName == "")
159 return GetCurrentPage(pageSize, currentPageIndex);//如果排序字段没写,则只有分页,不进行排序
160
161 DataView dv = new DataView(DtSource);
162 switch (sortKind)
163 {
164 case SortType.DESC :
165 dv.Sort = sortName + "DESC";
166 break;
167 case SortType .ASC :
168 dv.Sort = sortName + "ASC";
169 break;
170 default :
171 break;
172 }
173
174 _PageSiz = pageSize;
175 _CurrentPageIndex = currentPageIndex;
176
177 this._RowCount = this.DtSource.Rows.Count;
178 this._PageCount = this.RowCount / this.PageSize;
179 if (_PageCount * PageSize < RowCount) //如果计算出的页面数*页面上的数据量小于记录数,那么页面大小自动+1
180 {
181 _PageCount++;
182 }
183
184 int currentBeginRowIndex = pageSize * (currentPageIndex - 1); //当前页面的开始行
185 int currentEndRowIndex = pageSize * currentPageIndex - 1;//当前页面的结束行
186 DataTable dtRes = _DtSource.Clone(); //复制数据源表结构
187 for (int i = currentBeginRowIndex; i <= currentEndRowIndex; i++) //复制当前页面的数据到新的datatable中
188 {
189 if (i >= DtSource.Rows.Count)
190 break; //当前页面的记录小于该页面应该显示的记录时,就只取当前页面中的数据
191 DataRow dr = dtRes.NewRow();
192 for (int j = 0; j < _DtSource.Columns.Count; j++)
193 {
194 dr[j] = dv[i][j];
195 }
196 dtRes.Rows.Add(dr);
197 }
198 return dtRes;
199 }
200
201 /// <summary>
202 ///
203 /// </summary>
204 /// <param name="pageSize">每页面大小(每个页面上记录的数量)</param>
205 /// <param name="currentPageIndex">当前页面索引</param>
206 /// <returns></returns>
207 public DataTable GetCurrentPage(int pageSize, int currentPageIndex)
208 {
209 if (pageSize ==0)
210 {
211 return DtSource;//如果没有填写pagesize那么返回整个数据源
212 }
213 if (currentPageIndex <= 0)
214 {
215 return DtSource;//如果没有传入当前页面index,则返回整个数据源
216 }
217 _PageSiz = pageSize;
218
219 _CurrentPageIndex = currentPageIndex;
220 this._RowCount = this.DtSource.Rows.Count;
221 this._PageCount = this.RowCount / this.PageSize;
222 if (_PageCount * PageSize < RowCount) //如果计算出的页面数*页面上的数据量小于记录数,那么页面大小自动+1
223 _PageCount++;
224 int CurrentBeginRowIndex = PageSize * (currentPageIndex - 1); //当前页面的开始行
225 int CurrentEndRowIndex = PageSize * currentPageIndex - 1; //当前页面的结束行
226 DataView dv;
227 if (_DvSource == null)
228 dv = new DataView(DtSource);
229 else
230 dv = _DvSource;
231 DataTable dtRes = _DtSource.Clone(); //复制数据源表结构
232 for (int i = CurrentBeginRowIndex; i <= CurrentEndRowIndex; i++) //复制当前页面的数据到新的datatable中
233 {
234 if (i >= DtSource.Rows.Count) break; //当前页面的记录小于该页面应该显示的记录时,就只取当前页面中的数据
235 DataRow dr = dtRes.NewRow();
236 for (int j = 0; j < _DtSource.Columns.Count; j++)
237 {
238 dr[j] = dv[i][j];
239 }
240 dtRes.Rows.Add(dr);
241 }
242 return dtRes;
243 }
244 public enum SortType
245 {
246 ASC, //升序排列
247 DESC //倒序排列
248 }
249 }
250 }



你可能感兴趣的:(sort)