using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace STMes
{
public class DataPage
{
private DBProxy _dbProxy;
private string _dbName;
private string _priority;
private IDataParameter[] Params;
private object[] Values;
public bool _valid;
public string _errMsg;
private string countSql;
private string pageSql;
public DataPage(DBProxy dbProxy, string dbName, string priority)
{
_dbProxy = dbProxy;
_dbName = dbName;
_priority = priority;
}
public DataPage InitDataPage(string sql, int pageIndex, int pageSize, IDataParameter[] Params, object[] Values)
{
this.PageIndex = pageIndex;
this.PageSize = pageSize;
this.Params = Params;
this.Values = Values;
countSql = DataCountSql(sql);
pageSql = DataPageSql(sql, pageIndex, pageSize);
ExcuteQueryData();
return this;
}
public DataPage InitDataPage(string sql, int pageIndex, int pageSize)
{
this.PageIndex = pageIndex;
this.PageSize = pageSize;
countSql = DataCountSql(sql);
pageSql = DataPageSql(sql, pageIndex, pageSize);
ExcuteQueryData();
return this;
}
private string DataCountSql(string sql)
{
string strSql = string.Format("select count(*) from ( {0})", sql);
return strSql;
}
private string DataPageSql(string sql, int pageIndex, int pageSize)
{
int startIndex = (pageIndex - 1) * pageSize;
int endIndex = (pageIndex - 1) * pageSize + pageSize;
StringBuilder sbSql = new StringBuilder();
sbSql.Append(" SELECT * FROM (SELECT DATAPAGE_TABLE_A.*, rownum DATAPAGE_FIELD_ROWNUM FROM ");
sbSql.AppendFormat(" ( {0} ) DATAPAGE_TABLE_A", sql);
sbSql.AppendFormat(" where rownum <={0} ) DATAPAGE_TABLE_B where DATAPAGE_FIELD_ROWNUM>{1}", endIndex, startIndex);
return sbSql.ToString();
}
private void ExcuteQueryData()
{
DataSet ds = null;
try
{
// pageCount
DataSet dsPage = _dbProxy.ExecuteQuery(_dbName, _priority, countSql, CommandType.Text, Params, Values, out _errMsg);
if (dsPage != null)
{
this.RecordCount = int.Parse(dsPage.Tables[0].Rows[0][0].ToString());
ComputePageCount();
}
// page
ds = _dbProxy.ExecuteQuery(_dbName, _priority, pageSql, CommandType.Text, Params, Values, out _errMsg);
}
catch (Exception ex)
{
_valid = false;
_errMsg = ex.Message;
}
this.Result = ds;
}
#region 总记录数
private int _RecordCount = 0;
///
/// 总记录记录数
///
public int RecordCount
{
private set { _RecordCount = value; }
get
{
return _RecordCount;
}
}
#endregion
#region 一页的记录数
private Int32 _PageSize = 20;
///
/// 一页的记录数
///
public Int32 PageSize
{
private set { _PageSize = value; }
get
{
return _PageSize;
}
}
#endregion
#region 一共有多少页
private Int32 _PagerCount = 0;
///
/// 一共有多少页,根据总记录数和一页的记录数自动计算
///
public Int32 PageCount
{
private set { _PagerCount = value; }
get
{
return _PagerCount;
}
}
#endregion
#region 当前的页号
private Int32 _PageIndex = 1;
///
/// 当前的页号
///
public Int32 PageIndex
{
private set { _PageIndex = value; }
get
{
return _PageIndex;
}
}
#endregion
private DataSet _Result;
public DataSet Result
{
private set { _Result = value; }
get
{
return _Result;
}
}
#region 计算页数
///
/// 通过总记录数、一页的记录数计算页数
///
private Int32 ComputePageCount()
{
Int32 recordCount = this.RecordCount;
Int32 pageSize = this.PageSize;
Int32 tmpPageCount = 1;
if (recordCount > 0)
{
//计算页数
tmpPageCount = recordCount / pageSize + (recordCount % pageSize == 0 ? 0 : 1);
}
this.PageCount = tmpPageCount;
return tmpPageCount;
}
#endregion
}
}