DataPage.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. namespace STMes
  6. {
  7. public class DataPage
  8. {
  9. private DBProxy _dbProxy;
  10. private string _dbName;
  11. private string _priority;
  12. private IDataParameter[] Params;
  13. private object[] Values;
  14. public bool _valid;
  15. public string _errMsg;
  16. private string countSql;
  17. private string pageSql;
  18. public DataPage(DBProxy dbProxy, string dbName, string priority)
  19. {
  20. _dbProxy = dbProxy;
  21. _dbName = dbName;
  22. _priority = priority;
  23. }
  24. public DataPage InitDataPage(string sql, int pageIndex, int pageSize, IDataParameter[] Params, object[] Values)
  25. {
  26. this.PageIndex = pageIndex;
  27. this.PageSize = pageSize;
  28. this.Params = Params;
  29. this.Values = Values;
  30. countSql = DataCountSql(sql);
  31. pageSql = DataPageSql(sql, pageIndex, pageSize);
  32. ExcuteQueryData();
  33. return this;
  34. }
  35. public DataPage InitDataPage(string sql, int pageIndex, int pageSize)
  36. {
  37. this.PageIndex = pageIndex;
  38. this.PageSize = pageSize;
  39. countSql = DataCountSql(sql);
  40. pageSql = DataPageSql(sql, pageIndex, pageSize);
  41. ExcuteQueryData();
  42. return this;
  43. }
  44. private string DataCountSql(string sql)
  45. {
  46. string strSql = string.Format("select count(*) from ( {0})", sql);
  47. return strSql;
  48. }
  49. private string DataPageSql(string sql, int pageIndex, int pageSize)
  50. {
  51. int startIndex = (pageIndex - 1) * pageSize;
  52. int endIndex = (pageIndex - 1) * pageSize + pageSize;
  53. StringBuilder sbSql = new StringBuilder();
  54. sbSql.Append(" SELECT * FROM (SELECT DATAPAGE_TABLE_A.*, rownum DATAPAGE_FIELD_ROWNUM FROM ");
  55. sbSql.AppendFormat(" ( {0} ) DATAPAGE_TABLE_A", sql);
  56. sbSql.AppendFormat(" where rownum <={0} ) DATAPAGE_TABLE_B where DATAPAGE_FIELD_ROWNUM>{1}", endIndex, startIndex);
  57. return sbSql.ToString();
  58. }
  59. private void ExcuteQueryData()
  60. {
  61. DataSet ds = null;
  62. try
  63. {
  64. // pageCount
  65. DataSet dsPage = _dbProxy.ExecuteQuery(_dbName, _priority, countSql, CommandType.Text, Params, Values, out _errMsg);
  66. if (dsPage != null)
  67. {
  68. this.RecordCount = int.Parse(dsPage.Tables[0].Rows[0][0].ToString());
  69. ComputePageCount();
  70. }
  71. // page
  72. ds = _dbProxy.ExecuteQuery(_dbName, _priority, pageSql, CommandType.Text, Params, Values, out _errMsg);
  73. }
  74. catch (Exception ex)
  75. {
  76. _valid = false;
  77. _errMsg = ex.Message;
  78. }
  79. this.Result = ds;
  80. }
  81. #region 总记录数
  82. private int _RecordCount = 0;
  83. /// <summary>
  84. /// 总记录记录数
  85. /// </summary>
  86. public int RecordCount
  87. {
  88. private set { _RecordCount = value; }
  89. get
  90. {
  91. return _RecordCount;
  92. }
  93. }
  94. #endregion
  95. #region 一页的记录数
  96. private Int32 _PageSize = 20;
  97. /// <summary>
  98. /// 一页的记录数
  99. /// </summary>
  100. public Int32 PageSize
  101. {
  102. private set { _PageSize = value; }
  103. get
  104. {
  105. return _PageSize;
  106. }
  107. }
  108. #endregion
  109. #region 一共有多少页
  110. private Int32 _PagerCount = 0;
  111. /// <summary>
  112. /// 一共有多少页,根据总记录数和一页的记录数自动计算
  113. /// </summary>
  114. public Int32 PageCount
  115. {
  116. private set { _PagerCount = value; }
  117. get
  118. {
  119. return _PagerCount;
  120. }
  121. }
  122. #endregion
  123. #region 当前的页号
  124. private Int32 _PageIndex = 1;
  125. /// <summary>
  126. /// 当前的页号
  127. /// </summary>
  128. public Int32 PageIndex
  129. {
  130. private set { _PageIndex = value; }
  131. get
  132. {
  133. return _PageIndex;
  134. }
  135. }
  136. #endregion
  137. private DataSet _Result;
  138. public DataSet Result
  139. {
  140. private set { _Result = value; }
  141. get
  142. {
  143. return _Result;
  144. }
  145. }
  146. #region 计算页数
  147. /// <summary>
  148. /// 通过总记录数、一页的记录数计算页数
  149. /// </summary>
  150. private Int32 ComputePageCount()
  151. {
  152. Int32 recordCount = this.RecordCount;
  153. Int32 pageSize = this.PageSize;
  154. Int32 tmpPageCount = 1;
  155. if (recordCount > 0)
  156. {
  157. //计算页数
  158. tmpPageCount = recordCount / pageSize + (recordCount % pageSize == 0 ? 0 : 1);
  159. }
  160. this.PageCount = tmpPageCount;
  161. return tmpPageCount;
  162. }
  163. #endregion
  164. }
  165. }