改进型分页控件,用于 DataGrid,DataList,Repeater 控件分页操作
2006-04-13 17:17
525 查看
using System;
using System.Collections;
using System.Text;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
namespace AspxPager
{
/// <summary>
/// /*
///函数名称: GetRecordFromPage
///函数功能: 获取指定页的数据
///参数说明:
///@tblName 包含数据的表名
///@PKName 关键字段名
///@strGotFields 要获取的字段
///@PageSize 每页记录数
///@PageIndex 要获取的页码
///@OrderType 排序类型, 0 - 升序, 1 - 降序
///@strWhere 查询条件 (注意: 不要加 where)
///@isCount 是否取得记录条数 , 0 - 不取 , 1 - 获取
///@strSort 排序字段
///*/
///*
/// 函数名称: GetRecordFromPage
/// 函数功能: 获取指定页的数据
/// 参数说明:
/// @tblName 包含数据的表名
/// @PKName 关键字段名
/// @strGotFields 要获取的字段
/// @PageSize 每页记录数
/// @PageIndex 要获取的页码
/// @OrderType 排序类型, 0 - 升序, 1 - 降序
/// @strWhere 查询条件 (注意: 不要加 where)
/// @isCount 是否取得记录条数 , 0 - 不取 , 1 - 获取
/// @strSort 排序字段
/// */
/// CREATE PROCEDURE GetRecordFromPage
/// @tblName varchar(2000), -- 表名
/// @PKName varchar(255), -- 字段名
/// @strGotFields varchar(1000) = '*' , --查询字段名
/// @PageSize int = 10, -- 页尺寸
/// @PageIndex int = 1, -- 页码
/// @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
/// @strWhere varchar(2000) = '' , -- 查询条件 (注意: 不要加 where)
/// @isCount bit = 1, --取得记录条数
/// @strSort varchar(255) = '' --排序字段
/// --@GroupBy varchar(2000) ='' --分组字段
/// AS
/// declare @strSQL varchar(6000) -- 主语句
/// declare @strTmp varchar(2000) -- 临时变量
/// declare @strOrder varchar(500) -- 排序类型
/// declare @strCount varchar(2000)
/// declare @fldName varchar(500)
/// declare @sortName varchar(255)
/// declare @countSQL varchar(2000)
///
/// set @fldName = @PKName
/// if @strSort != ''
/// begin
/// set @sortName = @strSort
/// end
/// else
/// begin
/// set @sortName = @PKName
/// end
///
/// if @strWhere<>''
/// Set @strWhere = Replace(@strWhere,'''''','''')
///
/// Set @tblName = Replace(@tblName,'''''','''')
///
/// print @tblName
/// if @isCount = 1
/// begin
/// if @strWhere != ''
/// begin
/// set @countSQL = 'select count(' + @fldName + ') from ' + @tblName + ' where ' + @strWhere
/// end
/// else
/// begin
/// set @countSQL = 'select count(' + @fldName + ') from ' + @tblName
/// end
/// --set @countSQL = @countSQL + ' ' + @GroupBy
/// print @countSQL
/// exec (@countSQL)
/// return
/// end
/// else
/// begin
///
/// if @OrderType != 0
/// begin
/// set @strTmp = '<(select min'
/// set @strOrder = ' order by ' + @sortName + ' desc'
/// end
/// else
/// begin
/// set @strTmp = '>(select max'
/// set @strOrder = ' order by ' + @sortName +' asc'
/// end
///
/// set @strSQL = 'select top ' + str(@PageSize) + ' '+ @strGotFields + ' from '
/// + @tblName + ' where ' + @fldName + '' + @strTmp + '('
/// + @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '
/// + @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'
/// + @strOrder
///
/// if @strWhere != ''
/// set @strSQL = 'select top ' + str(@PageSize) + ' '+ @strGotFields + ' from '
/// + @tblName + ' where ' + @fldName + '' + @strTmp + '('
/// + @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '
/// + @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '
/// + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
///
/// if @PageIndex = 0
/// Set @PageIndex = 1
///
/// if @PageIndex = 1
/// begin
/// set @strTmp = ''
/// if @strWhere != ''
/// set @strTmp = ' where (' + @strWhere + ')'
///
/// set @strSQL = 'select top ' + str(@PageSize) + @strGotFields + ' from '
/// + @tblName + '' + @strTmp + ' ' + @strOrder
/// end
/// </summary>
[DesignerAttribute("AspxPager.CusPageCtrlDesign, AspxPager")]
[ToolboxData("<{0}:DataPager runat=server></{0}:DataPager>")]
public class DataPager : System.Web.UI.Control,IPostBackDataHandler, IPostBackEventHandler
{
private int _PageCount;
private string _TableName;
private string _SelectFields;
private string _SortField;
private int _CurPageIndex = 0;
private string _btDCtrl;
private string _SelectWhere;
private string _DataKeyField;
private int _itemCount;
private int _NumericPages = 10;
private int _PageSize = 20;
private int _ItemsCount;
private DataPager.PagerStyle _PageStyle = DataPager.PagerStyle.NextPrev;
private DataPager.OrderType itype;
private Control DataControl;
private string ControlType;
private string _FirstStr = "首页";
private string _PrevStr = "上页";
private string _NextStr = "下页";
private string _EndStr = "末页";
private string _GoStr = "GO";
private string _GoButtonCss;
private string _NextPrevEnableCss;
private string _NextPrevDisableCss;
private string _NextPrevTextBoxCss;
private string _NumericCurrentPagesCss;
private string _NumericPagesCss;
private string _NumericFormatString;
private string _NumericSeparator;
private string _TotalItemsFormatString;
private string _TotalPagesFormatString;
private string _TotalCurPageFormatString;
private string _AppSettingsKey;
private string ConnectionString;
private bool _EnableGo = true;
private string _Width;
private DataPager.HorizontalAlign _HzAlign;
private int _IndexNumCell = -1;
private DataView _datasource;
/// <summary>
/// 水平对齐方式
/// </summary>
public enum HorizontalAlign
{
Left = 0,
Center = 1,
Right = 2
}
/// <summary>
/// 排序
/// </summary>
public enum OrderType
{
Asc = 0,
Desc = 1
}
/// <summary>
/// 分页样式
/// </summary>
public enum PagerStyle
{
/// <summary>
/// 自定义
/// </summary>
Customer = 0,
/// <summary>
/// 上下页
/// </summary>
NextPrev = 1,
/// <summary>
/// 数字序号
/// </summary>
NumericPages = 2
}
#region 属性
/// <summary>
/// DataGrid 中索引列
/// </summary>
[Bindable(true),Category("DataGrid 样式"),DefaultValue("Server"),Description("DataGrid 中索引列")]
public int IndexNumCell
{
get{ return _IndexNumCell; }
set{ _IndexNumCell = value;}
}
/// <summary>
/// 数据库连接字符串 appSettings 节点
/// </summary>
[Bindable(true),Category("数据库"),DefaultValue("Server"),Description("Web.Config 中 数据库连接字符串 appSettings 节点")]
public string AppSettingsKey
{
get
{
return _AppSettingsKey;
}
set
{
_AppSettingsKey = value;
ConnectionString = System.Configuration.ConfigurationSettings.AppSettings[_AppSettingsKey];
}
}
/// <summary>
/// 格式化记录总数字符串
/// </summary>
[Bindable(true),Category("分页信息"),DefaultValue("共 {0} 记录"),Description("格式化记录总数字符串")]
public string TotalItemsFormatString
{
get{ return _TotalItemsFormatString; }
set{ _TotalItemsFormatString = value;}
}
/// <summary>
/// 格式化记录总数字符串
/// </summary>
[Bindable(true),Category("分页信息"),DefaultValue("共 {0} 页"),Description("格式化记录分页数字符串")]
public string TotalPagesFormatString
{
get{ return _TotalPagesFormatString; }
set{ _TotalPagesFormatString = value;}
}
/// <summary>
/// 格式化记录总数字符串
/// </summary>
[Bindable(true),Category("分页信息"),DefaultValue("当前第 {0} 页"),Description("格式化当前分页字符串")]
public string TotalCurPageFormatString
{
get{ return _TotalCurPageFormatString; }
set{ _TotalCurPageFormatString = value;}
}
/// <summary>
/// 跳转页码功能是否可用
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("跳转页码功能是否可用")]
public bool EnableGoVoid
{
get{ return _EnableGo; }
set{ _EnableGo = value;}
}
/// <summary>
/// 跳转页码输入框样式
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("跳转页码输入框样式")]
public string NextPrevTextBoxCss
{
get{ return _NextPrevTextBoxCss; }
set{ _NextPrevTextBoxCss = value;}
}
/// <summary>
/// 跳转按钮文字
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("跳转按钮文字")]
public string GoStr
{
get{ return _GoStr; }
set{ _GoStr = value;}
}
/// <summary>
/// 跳转按钮Css样式
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("跳转按钮Css样式")]
public string GoButtonCss
{
get{ return _GoButtonCss; }
set{ _GoButtonCss = value;}
}
/// <summary>
/// 上下页可用按钮Css样式
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("上下页可用按钮Css样式")]
public string NextPrevEnableCss
{
get{ return _NextPrevEnableCss; }
set{ _NextPrevEnableCss = value;}
}
/// <summary>
/// 上下页不可用按钮Css样式
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("上下页不可用按钮Css样式")]
public string NextPrevDisableCss
{
get{ return _NextPrevDisableCss; }
set{ _NextPrevDisableCss = value;}
}
/// <summary>
/// 首页文字
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("首页文字")]
public string FirstStr
{
get{ return _FirstStr; }
set{ _FirstStr = value;}
}
/// <summary>
/// 上一页文字
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("上一页文字")]
public string PrevStr
{
get{ return _PrevStr; }
set{ _PrevStr = value;}
}
/// <summary>
/// 下一页文字
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("下一页文字")]
public string NextStr
{
get{ return _NextStr; }
set{ _NextStr = value;}
}
/// <summary>
/// 末页文字
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("末页文字")]
public string EndStr
{
get{ return _EndStr; }
set{ _EndStr = value;}
}
/// <summary>
/// 当前所在分页Css样式
/// </summary>
[Bindable(true),Category("NumericPages"),DefaultValue(""),Description("当前所在分页Css样式")]
public string NumericCurrentPagesCss
{
get{ return _NumericCurrentPagesCss; }
set{ _NumericCurrentPagesCss = value;}
}
/// <summary>
/// 分页Css样式
/// </summary>
[Bindable(true),Category("NumericPages"),DefaultValue(""),Description("分页Css样式")]
public string NumericPagesCss
{
get{ return _NumericPagesCss; }
set{ _NumericPagesCss = value;}
}
/// <summary>
/// 分页样式为:NumericPages 时,数字序号长度
/// </summary>
[Bindable(true),Category("NumericPages"),DefaultValue(""),Description("分页样式为:NumericPages 时,数字序号长度")]
public int NumericPages
{
get{ return _NumericPages; }
set{ _NumericPages = value;}
}
/// <summary>
/// 页码分隔符
/// </summary>
[Bindable(true),Category("NumericPages"),DefaultValue("|"),Description("页码分隔符")]
public string NumericSeparator
{
get{ return _NumericSeparator; }
set{ _NumericSeparator = value;}
}
/// <summary>
/// 格式化分页页码字符串
/// </summary>
[Bindable(true),Category("NumericPages"),DefaultValue(""),Description("格式化分页页码字符串")]
public string NumericFormatString
{
get{ return _NumericFormatString; }
set{ _NumericFormatString = value;}
}
/// <summary>
/// 数据记录条数
/// </summary>
public int ItemsCount
{
get{ return _ItemsCount; }
}
/// <summary>
/// 分页样式
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("分页样式")]
public DataPager.PagerStyle PageStyle
{
get{ return _PageStyle; }
set{ _PageStyle = value;}
}
/// <summary>
/// 排序方式
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("排序方式")]
public DataPager.OrderType Order
{
get{ return itype; }
set{ itype = value;}
}
/// <summary>
/// 分页数
/// </summary>
public int PageCount
{
get{ return _PageCount; }
}
/// <summary>
/// 关键字段
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("关键字段")]
public string KeyField
{
get{ return _DataKeyField; }
set{ _DataKeyField = value;}
}
/// <summary>
/// 杳询条件
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("查询条件")]
public string SelectWhere
{
get{ return _SelectWhere; }
set{ _SelectWhere = value; }
}
/// <summary>
/// 要绑定的数据控件
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("要绑定的数据控件 ID 值:DataGrid,DataList,Repeater")]
public string BindToDataControl
{
get{ return _btDCtrl; }
set{ _btDCtrl = value; }
}
/// <summary>
/// 当前页码索引
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("当前页码索引")]
public int CurPageIndex
{
get{ return _CurPageIndex; }
set{ _CurPageIndex = value; }
}
/// <summary>
/// 排序字段
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("排序字段")]
public string SortField
{
get{ return _SortField; }
set{ _SortField = value;}
}
/// <summary>
/// 分页记录条数
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("25"),Description("分页记录条数")]
public int PageSize
{
get{ return _PageSize; }
set{ _PageSize = value; }
}
/// <summary>
/// 查询数据来源表格
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("数据表")]
public string SelectTableName
{
get{ return _TableName; }
set{ _TableName = value;}
}
/// <summary>
/// 查询字段
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("从数据表中读取出来的字段")]
public string SelectFields
{
get{ return _SelectFields; }
set{ _SelectFields = value; }
}
/// <summary>
/// 水平对齐方式
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("100%"),Description("水平对齐方式")]
public DataPager.HorizontalAlign Align
{
get{ return _HzAlign; }
set{ _HzAlign = value;}
}
/// <summary>
/// 控件宽度
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("宽度")]
public string Width
{
get{ return _Width; }
set{ _Width = value;}
}
#endregion
#region 控件内部规范
protected override object SaveViewState()
{
ArrayList ary = new ArrayList();
ary.Add(""); //0
ary.Add(this.BindToDataControl); //1
ary.Add(this.CurPageIndex); //2
ary.Add(this.KeyField); //3
ary.Add(this.PageCount); //4
ary.Add(this.PageSize); //5
ary.Add(this.SelectFields); //6
ary.Add(this.SelectWhere); //7
ary.Add(this.SortField); //8
ary.Add(this.SelectTableName); //9
ary.Add(this.NumericPages); //10
ary.Add((int)this.Order); //11
ary.Add((int)this.PageStyle); //12
ary.Add(ItemsCount); //13
ary.Add(this.FirstStr); //14
ary.Add(this.PrevStr); //15
ary.Add(this.NextStr); //16
ary.Add(this.EndStr); //17
ary.Add(this.GoStr); //18
ary.Add(this.NextPrevDisableCss); //19
ary.Add(this.NextPrevEnableCss); //20
ary.Add(this.NextPrevTextBoxCss); //21
ary.Add(this.NumericCurrentPagesCss);//22
ary.Add(this.NumericFormatString); //23
ary.Add(this.NumericPagesCss); //24
ary.Add(this.NumericSeparator); //25
ary.Add(this.TotalCurPageFormatString); //26
ary.Add(this.TotalItemsFormatString); //27
ary.Add(this.TotalPagesFormatString); //28
ary.Add(this.EnableGoVoid); //29
ary.Add(this.AppSettingsKey); //30
ary.Add(this.IndexNumCell); //31
return (object)ary;
}
protected override void LoadViewState(object savedState)
{
ArrayList ary = (ArrayList)savedState;
this.BindToDataControl = ary[1].ToString();
this.CurPageIndex = Convert.ToInt32(ary[2]);
this.KeyField = ary[3].ToString();
//this.PageCount = Convert.ToInt32(ary[4]);
//System.Web.HttpContext.Current.Response.Write(ary[5].ToString());
this.PageSize = Convert.ToInt32(ary[5]);
this.SelectFields = ary[6].ToString();
if(ary[7] != null)
{
this.SelectWhere = ary[7].ToString();
}
if(ary[8] != null)
{
this.SortField = ary[8].ToString();
}
this.SelectTableName = ary[9].ToString();
this.NumericPages = Convert.ToInt32(ary[10]);
this.Order = (DataPager.OrderType)Convert.ToInt32(ary[11]);
this.PageStyle = (DataPager.PagerStyle)Convert.ToInt32(ary[12]);
this._ItemsCount = Convert.ToInt32(ary[13]);
if(ary[14] != null)
{
this.FirstStr = ary[14].ToString();
}
if(ary[15] != null)
{
this.PrevStr = ary[15].ToString();
}
if(ary[16] != null)
{
this.NextStr = ary[16].ToString();
}
if(ary[17] != null)
{
this.EndStr = ary[17].ToString();
}
if(ary[18] != null)
{
this.GoStr = ary[18].ToString();
}
if(ary[19] != null)
{
this.NextPrevDisableCss = ary[19].ToString();
}
if(ary[20] != null)
{
this.NextPrevEnableCss = ary[20].ToString();
}
if(ary[21] != null)
{
this.NextPrevTextBoxCss = ary[21].ToString();
}
if(ary[22] != null)
{
this.NumericCurrentPagesCss = ary[22].ToString();
}
if(ary[23] != null)
{
this.NumericFormatString = ary[23].ToString();
}
if(ary[24] != null)
{
this.NumericPagesCss = ary[24].ToString();
}
if(ary[25] != null)
{
this.NumericSeparator = ary[25].ToString();
}
if(ary[26] != null)
{
this.TotalCurPageFormatString = ary[26].ToString();
}
if(ary[28] != null)
{
this.TotalPagesFormatString = ary[28].ToString();
}
if(ary[27] != null)
{
this.TotalItemsFormatString = ary[27].ToString();
}
this.EnableGoVoid = Convert.ToBoolean(ary[29]);
this.AppSettingsKey = ary[30].ToString();
this.IndexNumCell = Convert.ToInt32(ary[31]);
}
public bool LoadPostData(string postDataKey, NameValueCollection values)
{
this.CurPageIndex = Int32.Parse(values[this.UniqueID]);
return false;
}
public void RaisePostDataChangedEvent()
{
// IPostBackDataHandler 协定的一部分。如果曾经从 LoadPostData 方法返回真
// (表示需要引发更改通知),则被调用。由于
// 始终返回假,则此方法只是一个空操作。
}
public void RaisePostBackEvent(string eventArgument)
{
//this.CurPageIndex = Convert.ToInt32(eventArgument);
GetDataSource();
}
protected override void OnInit(EventArgs e)
{
DataControl = this.Parent.FindControl(this.BindToDataControl);
this.ControlType = DataControl.GetType().ToString();
if(ControlType == "System.Web.UI.WebControls.DataGrid")
{
DataGrid dGrid = (DataGrid)DataControl;
dGrid.SortCommand += new DataGridSortCommandEventHandler(DataGrid_SortCommand);
dGrid.ItemDataBound += new DataGridItemEventHandler(DataGrid_ItemDataBound);
}
}
protected override void OnLoad(EventArgs e)
{
this.DataBind();
}
public override void DataBind()
{
GetDataSourcePageCount();
this.GetDataSource();
base.DataBind ();
}
protected override void Render(HtmlTextWriter output)
{
output.Write("<input type=/"hidden/" name=" + this.UniqueID + " type=text value=" + this.CurPageIndex + ">");
if(this.Width != null)
{
output.Write("<table width=/"" + this.Width + "/">");
}
else
{
output.Write("<table>");
}
output.Write("<tr valign=/"middle/">");
output.Write("<td align=/"left/">");
if(this.TotalItemsFormatString != null)
{
// System.Web.HttpContext.Current.Response.Write(TotalItemsFormatString + "<br>");
// System.Web.HttpContext.Current.Response.Write(TotalCurPageFormatString + "<br>");
// System.Web.HttpContext.Current.Response.Write(TotalPagesFormatString + "<br>");
output.Write(String.Format(TotalItemsFormatString,this._itemCount) + " ");
}
if(this.TotalCurPageFormatString != null)
{
output.Write(String.Format(TotalCurPageFormatString,(this.CurPageIndex + 1)) + " ");
}
if(this.TotalPagesFormatString != null)
{
output.Write(String.Format(TotalPagesFormatString,this.PageCount) + " ");
}
output.Write("</td>");
output.Write("<td align=/"right/">");
if(this.PageStyle == DataPager.PagerStyle.NumericPages)
{
output.Write(this.NumericPageString());
}
else if(this.PageStyle == DataPager.PagerStyle.NextPrev)
{
output.Write(this.NextPrevString());
}
output.Write("</td>");
output.Write("</tr>");
output.Write("</table>");
}
#endregion
#region 私有方法
/// <summary>
/// 取得页码数
/// </summary>
private void GetDataSourcePageCount()
{
try
{
SqlParameter[] arParams = new SqlParameter[9];
arParams[0] = new SqlParameter("@tblName",SqlDbType.VarChar,2000);
arParams[0].Value = this.SelectTableName;
arParams[1] = new SqlParameter("@strGotFields",SqlDbType.VarChar,1000);
arParams[1].Value = this.SelectFields;
arParams[2] = new SqlParameter("@strSort",SqlDbType.VarChar,200);
arParams[2].Value = this.SortField;
arParams[3] = new SqlParameter("@OrderType",SqlDbType.Bit);
arParams[3].Value = false;
arParams[4] = new SqlParameter("@PageSize",SqlDbType.Int);
arParams[4].Value = this.PageSize;
arParams[5] = new SqlParameter("@PageIndex",SqlDbType.Int);
arParams[5].Value = this.CurPageIndex + 1;
arParams[6] = new SqlParameter("@strWhere",SqlDbType.VarChar,2000);
arParams[6].Value = this.SelectWhere;
arParams[7] = new SqlParameter("@isCount",SqlDbType.Bit);
arParams[7].Value = true;
arParams[8] = new SqlParameter("@PKName",SqlDbType.VarChar,200);
arParams[8].Value = this.KeyField;
SqlConnection SqlCon = new SqlConnection(this.ConnectionString);
SqlCon.Open();
SqlCommand DataCmd = new SqlCommand();
DataCmd.Connection = SqlCon;
DataCmd.CommandType = CommandType.StoredProcedure;
DataCmd.CommandText = "GetRecordFromPage";
for(int i=0;i<9;i++)
{
DataCmd.Parameters.Add(arParams[i]);
}
_itemCount = Convert.ToInt32(DataCmd.ExecuteScalar().ToString());
SqlCon.Close();
this._PageCount = Convert.ToInt32(Math.Ceiling( Convert.ToDouble(_itemCount) / Convert.ToDouble(this.PageSize)));
}
catch(Exception ex)
{
Page.Response.Write("PageCount Error:" + ex.Message);
}
//Page.Response.Write(ViewState["CurPageCount"].ToString());
}
/// <summary>
/// 设置数据
/// </summary>
private void GetDataSource()
{
try
{
bool tmp = true;
DataSet ds = new DataSet();
if(itype == OrderType.Desc)
{
tmp = false;
}
SqlParameter[] arParams = new SqlParameter[9];
arParams[0] = new SqlParameter("@tblName",SqlDbType.VarChar,2000);
arParams[0].Value = this.SelectTableName;
arParams[1] = new SqlParameter("@strGotFields",SqlDbType.VarChar,1000);
arParams[1].Value = this.SelectFields;
arParams[2] = new SqlParameter("@strSort",SqlDbType.VarChar,200);
arParams[2].Value = this.SortField;
arParams[3] = new SqlParameter("@OrderType",SqlDbType.Bit);
arParams[3].Value = tmp;
arParams[4] = new SqlParameter("@PageSize",SqlDbType.Int);
arParams[4].Value = this.PageSize;
arParams[5] = new SqlParameter("@PageIndex",SqlDbType.Int);
arParams[5].Value = this.CurPageIndex + 1;
arParams[6] = new SqlParameter("@strWhere",SqlDbType.VarChar,2000);
arParams[6].Value = this.SelectWhere;
arParams[7] = new SqlParameter("@isCount",SqlDbType.Bit);
arParams[7].Value = false;
arParams[8] = new SqlParameter("@PKName",SqlDbType.VarChar,200);
arParams[8].Value = this.KeyField;
SqlConnection SqlCon = new SqlConnection(this.ConnectionString);
SqlCon.Open();
SqlCommand DataCmd = new SqlCommand();
DataCmd.Connection = SqlCon;
DataCmd.CommandType = CommandType.StoredProcedure;
DataCmd.CommandText = "GetRecordFromPage";
for(int i=0;i<9;i++)
{
DataCmd.Parameters.Add(arParams[i]);
}
SqlDataAdapter DataAdapter = new SqlDataAdapter();
DataAdapter.SelectCommand = DataCmd;
DataAdapter.Fill(ds);
SqlCon.Close();
this._datasource = ds.Tables[0].DefaultView;
if(ControlType == "System.Web.UI.WebControls.DataGrid")
{
DataGrid dGrid = (DataGrid)DataControl;
//DataGrid 控件排序样式
if(SortField != null)
{
//Page.Response.Write("<br>SortField:"+SortField);
int i=0;
string strtmp = null;
for(i=0;i<dGrid.Columns.Count;i++)
{
strtmp = dGrid.Columns[i].HeaderText;
strtmp = strtmp.Replace("<font face=/"Webdings/">6</font>","");
strtmp = strtmp.Replace("<font face=/"Webdings/">5</font>","");
dGrid.Columns[i].HeaderText = strtmp;
if(dGrid.Columns[i].SortExpression.ToLower() == this.SortField.ToLower())
{
if(this.Order == OrderType.Desc)
{
dGrid.Columns[i].HeaderText = strtmp + "<font face=/"Webdings/">6</font>";
}
else
{
dGrid.Columns[i].HeaderText = strtmp + "<font face=/"Webdings/">5</font>";
}
}
}
}
dGrid.DataSource = this._datasource;
dGrid.DataBind();
}
else if(ControlType == "System.Web.UI.WebControls.DataList")
{
DataList dList = (DataList)DataControl;
dList.DataSource = this._datasource;
dList.DataBind();
}
else if(ControlType == "System.Web.UI.WebControls.Repeater")
{
Repeater RepList = (Repeater)DataControl;
RepList.DataSource = this._datasource;
RepList.DataBind();
}
}
catch(SqlException ex)
{
Page.Response.Write("ErrorMessage:" + ex.Message);
Page.Response.Write("<br>GetRecordFromPage '" + this.SelectTableName + "','"+this.KeyField+"','"+this.SelectFields+"',"+this.PageSize+","+this.CurPageIndex+",'"+this.Order.ToString()+"','"+this.SelectWhere+"',0,'"+this.SortField+"'");
}
}
/// <summary>
/// 上一页,下一页分页方式
/// </summary>
/// <returns></returns>
private string NextPrevString()
{
StringBuilder sb = new StringBuilder();
if(this.CurPageIndex <= 0)
{
sb.Append("首页");
sb.Append(" ");
sb.Append("上页 ");
}
else
{
sb.Append("<a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=0;" + Page.GetPostBackEventReference(this,"0")+ "/">首页</a>");
sb.Append(" ");
sb.Append("<a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=" + this.UniqueID + ".value*1-1;" + Page.GetPostBackEventReference(this,"0")+ "/">上页</a> ");
}
if(this.CurPageIndex >= (this.PageCount-1))
{
sb.Append("下页");
sb.Append(" ");
sb.Append("末页");
}
else
{
sb.Append("<a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=" + this.UniqueID + ".value*1+1;" + Page.GetPostBackEventReference(this,"0")+ "/">下页</a>");
sb.Append(" ");
sb.Append("<a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=" + (this.PageCount-1).ToString() + ";" + Page.GetPostBackEventReference(this,"0")+ "/">末页</a>");
}
if(this.EnableGoVoid)
{
sb.Append("/n<script>/n");
sb.Append("function Check_" + this.UniqueID + "_GoEnable(obj)/n{");
sb.Append(" var maxPageIndex=" + (this.PageCount - 1).ToString() + ";/n");
sb.Append(" if(isNaN(obj.value) == false && obj.value != '')/n{");
sb.Append(" if(obj.value <= maxPageIndex && obj.value > 0)/n{/n document.forms[0]." + this.UniqueID + ".value=obj.value-1;/n return true;/n}else{/nreturn false;/n}/n");
sb.Append(" }/n");//alert(DataPager1.value);" + this.UniqueID + ".value=obj.value-1;
sb.Append("return false;/n");
sb.Append("}/n");
sb.Append("/n</script>/n");
sb.Append("<input type=/"text/" class=/"" + this.NextPrevTextBoxCss + "/" value=/"" + (this.CurPageIndex + 1).ToString() + "/" id=/"Go_Text_" + this.UniqueID + "/" Name=/"Go_Text_" + this.UniqueID + "/">");
sb.Append(" ");
sb.Append(" ");
sb.Append("<input type=/"button/" class=/"" + this.GoButtonCss + "/" value=/"" + this.GoStr + "/" onclick=/"if(Check_" + this.UniqueID + "_GoEnable(Go_Text_" + this.UniqueID +")==false){return false;}else{" + Page.GetPostBackEventReference(this,"0") + ";}/">");
}
return sb.ToString();
}
/// <summary>
/// 数字分页
/// </summary>
/// <returns></returns>
private string NumericPageString()
{
int max;
int min;
int i,len;
int ShowSize = this.NumericPages;
string tmp = null;
StringBuilder sb = new StringBuilder();
min = Convert.ToInt32(Math.Floor((this.CurPageIndex + 1) / ShowSize)) * ShowSize;
max = min + ShowSize;
len = this.PageCount;
if(max > len)
{
max = len;
}
if(min >= ShowSize)
{
sb.Append("<a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=" + (min-2).ToString() + ";" + Page.GetPostBackEventReference(this, (min-2).ToString())+ "/" title=/"向前翻页/"><font face=webdings>9</font></a> ");
}
for(i = min;i <= max ;i++ )
{
if(i == this.CurPageIndex)
{
tmp = "<font class=/"" + "" + "/">" + (i+1).ToString() + "</font>";
}
else
{
tmp = (i+1).ToString();
}
if(this.NumericFormatString != null)
{
tmp = String.Format(NumericFormatString,tmp);
}
if(i <= max - 1)
{
sb.Append("<a style=/"cursor:hand/" onclick=/"jscript:" + this.UniqueID + ".value=" + i.ToString() + ";" + Page.GetPostBackEventReference(this, i.ToString())+ "/">" + tmp + "</a>");
}
if(i <= max - 2)
{
sb.Append(" " + this.NumericSeparator + " ");
}
else if(i == max - 1 && (max == min + 10))
{
sb.Append(" <a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=" + i.ToString() + ";" + Page.GetPostBackEventReference(this, i.ToString())+ "/" title=/"向后翻页/"><font face=webdings>:</font></a>");
}
}
return sb.ToString();
}
private void DataGrid_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
this._SortField = e.SortExpression;
string sort = e.SortExpression;
if(_SortField != sort)
{
_SortField = sort;
this.Order = OrderType.Desc;
}
else
{
if(this.Order == OrderType.Desc)
{
this.Order = OrderType.Asc;
}
else
{
this.Order = OrderType.Desc;
}
}
GetDataSource();
}
private void DataGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(this.IndexNumCell >= 0)
{
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
e.Item.Cells[this.IndexNumCell].Text = (e.Item.ItemIndex + this.CurPageIndex * this.PageSize).ToString();
}
}
}
#endregion
}
public class CusPageCtrlDesign : ControlDesigner
{
public override string GetDesignTimeHtml()
{
DataPager control = (DataPager)Component;
string tmp = "<span style=/"font-size:12px;color=#000000;background-color:#f5f5f5;padding:4px;border:1px solid #c7c7c7;border-top:1px solid #c7c7c7;border-left:1px solid #c7c7c7/">";
tmp = tmp + "<strong>数据分页控件</strong>" + control.ID + "</span>";
return tmp;
}
}
}
using System.Collections;
using System.Text;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
namespace AspxPager
{
/// <summary>
/// /*
///函数名称: GetRecordFromPage
///函数功能: 获取指定页的数据
///参数说明:
///@tblName 包含数据的表名
///@PKName 关键字段名
///@strGotFields 要获取的字段
///@PageSize 每页记录数
///@PageIndex 要获取的页码
///@OrderType 排序类型, 0 - 升序, 1 - 降序
///@strWhere 查询条件 (注意: 不要加 where)
///@isCount 是否取得记录条数 , 0 - 不取 , 1 - 获取
///@strSort 排序字段
///*/
///*
/// 函数名称: GetRecordFromPage
/// 函数功能: 获取指定页的数据
/// 参数说明:
/// @tblName 包含数据的表名
/// @PKName 关键字段名
/// @strGotFields 要获取的字段
/// @PageSize 每页记录数
/// @PageIndex 要获取的页码
/// @OrderType 排序类型, 0 - 升序, 1 - 降序
/// @strWhere 查询条件 (注意: 不要加 where)
/// @isCount 是否取得记录条数 , 0 - 不取 , 1 - 获取
/// @strSort 排序字段
/// */
/// CREATE PROCEDURE GetRecordFromPage
/// @tblName varchar(2000), -- 表名
/// @PKName varchar(255), -- 字段名
/// @strGotFields varchar(1000) = '*' , --查询字段名
/// @PageSize int = 10, -- 页尺寸
/// @PageIndex int = 1, -- 页码
/// @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
/// @strWhere varchar(2000) = '' , -- 查询条件 (注意: 不要加 where)
/// @isCount bit = 1, --取得记录条数
/// @strSort varchar(255) = '' --排序字段
/// --@GroupBy varchar(2000) ='' --分组字段
/// AS
/// declare @strSQL varchar(6000) -- 主语句
/// declare @strTmp varchar(2000) -- 临时变量
/// declare @strOrder varchar(500) -- 排序类型
/// declare @strCount varchar(2000)
/// declare @fldName varchar(500)
/// declare @sortName varchar(255)
/// declare @countSQL varchar(2000)
///
/// set @fldName = @PKName
/// if @strSort != ''
/// begin
/// set @sortName = @strSort
/// end
/// else
/// begin
/// set @sortName = @PKName
/// end
///
/// if @strWhere<>''
/// Set @strWhere = Replace(@strWhere,'''''','''')
///
/// Set @tblName = Replace(@tblName,'''''','''')
///
/// print @tblName
/// if @isCount = 1
/// begin
/// if @strWhere != ''
/// begin
/// set @countSQL = 'select count(' + @fldName + ') from ' + @tblName + ' where ' + @strWhere
/// end
/// else
/// begin
/// set @countSQL = 'select count(' + @fldName + ') from ' + @tblName
/// end
/// --set @countSQL = @countSQL + ' ' + @GroupBy
/// print @countSQL
/// exec (@countSQL)
/// return
/// end
/// else
/// begin
///
/// if @OrderType != 0
/// begin
/// set @strTmp = '<(select min'
/// set @strOrder = ' order by ' + @sortName + ' desc'
/// end
/// else
/// begin
/// set @strTmp = '>(select max'
/// set @strOrder = ' order by ' + @sortName +' asc'
/// end
///
/// set @strSQL = 'select top ' + str(@PageSize) + ' '+ @strGotFields + ' from '
/// + @tblName + ' where ' + @fldName + '' + @strTmp + '('
/// + @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '
/// + @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'
/// + @strOrder
///
/// if @strWhere != ''
/// set @strSQL = 'select top ' + str(@PageSize) + ' '+ @strGotFields + ' from '
/// + @tblName + ' where ' + @fldName + '' + @strTmp + '('
/// + @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '
/// + @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '
/// + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
///
/// if @PageIndex = 0
/// Set @PageIndex = 1
///
/// if @PageIndex = 1
/// begin
/// set @strTmp = ''
/// if @strWhere != ''
/// set @strTmp = ' where (' + @strWhere + ')'
///
/// set @strSQL = 'select top ' + str(@PageSize) + @strGotFields + ' from '
/// + @tblName + '' + @strTmp + ' ' + @strOrder
/// end
/// </summary>
[DesignerAttribute("AspxPager.CusPageCtrlDesign, AspxPager")]
[ToolboxData("<{0}:DataPager runat=server></{0}:DataPager>")]
public class DataPager : System.Web.UI.Control,IPostBackDataHandler, IPostBackEventHandler
{
private int _PageCount;
private string _TableName;
private string _SelectFields;
private string _SortField;
private int _CurPageIndex = 0;
private string _btDCtrl;
private string _SelectWhere;
private string _DataKeyField;
private int _itemCount;
private int _NumericPages = 10;
private int _PageSize = 20;
private int _ItemsCount;
private DataPager.PagerStyle _PageStyle = DataPager.PagerStyle.NextPrev;
private DataPager.OrderType itype;
private Control DataControl;
private string ControlType;
private string _FirstStr = "首页";
private string _PrevStr = "上页";
private string _NextStr = "下页";
private string _EndStr = "末页";
private string _GoStr = "GO";
private string _GoButtonCss;
private string _NextPrevEnableCss;
private string _NextPrevDisableCss;
private string _NextPrevTextBoxCss;
private string _NumericCurrentPagesCss;
private string _NumericPagesCss;
private string _NumericFormatString;
private string _NumericSeparator;
private string _TotalItemsFormatString;
private string _TotalPagesFormatString;
private string _TotalCurPageFormatString;
private string _AppSettingsKey;
private string ConnectionString;
private bool _EnableGo = true;
private string _Width;
private DataPager.HorizontalAlign _HzAlign;
private int _IndexNumCell = -1;
private DataView _datasource;
/// <summary>
/// 水平对齐方式
/// </summary>
public enum HorizontalAlign
{
Left = 0,
Center = 1,
Right = 2
}
/// <summary>
/// 排序
/// </summary>
public enum OrderType
{
Asc = 0,
Desc = 1
}
/// <summary>
/// 分页样式
/// </summary>
public enum PagerStyle
{
/// <summary>
/// 自定义
/// </summary>
Customer = 0,
/// <summary>
/// 上下页
/// </summary>
NextPrev = 1,
/// <summary>
/// 数字序号
/// </summary>
NumericPages = 2
}
#region 属性
/// <summary>
/// DataGrid 中索引列
/// </summary>
[Bindable(true),Category("DataGrid 样式"),DefaultValue("Server"),Description("DataGrid 中索引列")]
public int IndexNumCell
{
get{ return _IndexNumCell; }
set{ _IndexNumCell = value;}
}
/// <summary>
/// 数据库连接字符串 appSettings 节点
/// </summary>
[Bindable(true),Category("数据库"),DefaultValue("Server"),Description("Web.Config 中 数据库连接字符串 appSettings 节点")]
public string AppSettingsKey
{
get
{
return _AppSettingsKey;
}
set
{
_AppSettingsKey = value;
ConnectionString = System.Configuration.ConfigurationSettings.AppSettings[_AppSettingsKey];
}
}
/// <summary>
/// 格式化记录总数字符串
/// </summary>
[Bindable(true),Category("分页信息"),DefaultValue("共 {0} 记录"),Description("格式化记录总数字符串")]
public string TotalItemsFormatString
{
get{ return _TotalItemsFormatString; }
set{ _TotalItemsFormatString = value;}
}
/// <summary>
/// 格式化记录总数字符串
/// </summary>
[Bindable(true),Category("分页信息"),DefaultValue("共 {0} 页"),Description("格式化记录分页数字符串")]
public string TotalPagesFormatString
{
get{ return _TotalPagesFormatString; }
set{ _TotalPagesFormatString = value;}
}
/// <summary>
/// 格式化记录总数字符串
/// </summary>
[Bindable(true),Category("分页信息"),DefaultValue("当前第 {0} 页"),Description("格式化当前分页字符串")]
public string TotalCurPageFormatString
{
get{ return _TotalCurPageFormatString; }
set{ _TotalCurPageFormatString = value;}
}
/// <summary>
/// 跳转页码功能是否可用
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("跳转页码功能是否可用")]
public bool EnableGoVoid
{
get{ return _EnableGo; }
set{ _EnableGo = value;}
}
/// <summary>
/// 跳转页码输入框样式
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("跳转页码输入框样式")]
public string NextPrevTextBoxCss
{
get{ return _NextPrevTextBoxCss; }
set{ _NextPrevTextBoxCss = value;}
}
/// <summary>
/// 跳转按钮文字
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("跳转按钮文字")]
public string GoStr
{
get{ return _GoStr; }
set{ _GoStr = value;}
}
/// <summary>
/// 跳转按钮Css样式
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("跳转按钮Css样式")]
public string GoButtonCss
{
get{ return _GoButtonCss; }
set{ _GoButtonCss = value;}
}
/// <summary>
/// 上下页可用按钮Css样式
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("上下页可用按钮Css样式")]
public string NextPrevEnableCss
{
get{ return _NextPrevEnableCss; }
set{ _NextPrevEnableCss = value;}
}
/// <summary>
/// 上下页不可用按钮Css样式
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("上下页不可用按钮Css样式")]
public string NextPrevDisableCss
{
get{ return _NextPrevDisableCss; }
set{ _NextPrevDisableCss = value;}
}
/// <summary>
/// 首页文字
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("首页文字")]
public string FirstStr
{
get{ return _FirstStr; }
set{ _FirstStr = value;}
}
/// <summary>
/// 上一页文字
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("上一页文字")]
public string PrevStr
{
get{ return _PrevStr; }
set{ _PrevStr = value;}
}
/// <summary>
/// 下一页文字
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("下一页文字")]
public string NextStr
{
get{ return _NextStr; }
set{ _NextStr = value;}
}
/// <summary>
/// 末页文字
/// </summary>
[Bindable(true),Category("上下页分页样式"),DefaultValue(""),Description("末页文字")]
public string EndStr
{
get{ return _EndStr; }
set{ _EndStr = value;}
}
/// <summary>
/// 当前所在分页Css样式
/// </summary>
[Bindable(true),Category("NumericPages"),DefaultValue(""),Description("当前所在分页Css样式")]
public string NumericCurrentPagesCss
{
get{ return _NumericCurrentPagesCss; }
set{ _NumericCurrentPagesCss = value;}
}
/// <summary>
/// 分页Css样式
/// </summary>
[Bindable(true),Category("NumericPages"),DefaultValue(""),Description("分页Css样式")]
public string NumericPagesCss
{
get{ return _NumericPagesCss; }
set{ _NumericPagesCss = value;}
}
/// <summary>
/// 分页样式为:NumericPages 时,数字序号长度
/// </summary>
[Bindable(true),Category("NumericPages"),DefaultValue(""),Description("分页样式为:NumericPages 时,数字序号长度")]
public int NumericPages
{
get{ return _NumericPages; }
set{ _NumericPages = value;}
}
/// <summary>
/// 页码分隔符
/// </summary>
[Bindable(true),Category("NumericPages"),DefaultValue("|"),Description("页码分隔符")]
public string NumericSeparator
{
get{ return _NumericSeparator; }
set{ _NumericSeparator = value;}
}
/// <summary>
/// 格式化分页页码字符串
/// </summary>
[Bindable(true),Category("NumericPages"),DefaultValue(""),Description("格式化分页页码字符串")]
public string NumericFormatString
{
get{ return _NumericFormatString; }
set{ _NumericFormatString = value;}
}
/// <summary>
/// 数据记录条数
/// </summary>
public int ItemsCount
{
get{ return _ItemsCount; }
}
/// <summary>
/// 分页样式
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("分页样式")]
public DataPager.PagerStyle PageStyle
{
get{ return _PageStyle; }
set{ _PageStyle = value;}
}
/// <summary>
/// 排序方式
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("排序方式")]
public DataPager.OrderType Order
{
get{ return itype; }
set{ itype = value;}
}
/// <summary>
/// 分页数
/// </summary>
public int PageCount
{
get{ return _PageCount; }
}
/// <summary>
/// 关键字段
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("关键字段")]
public string KeyField
{
get{ return _DataKeyField; }
set{ _DataKeyField = value;}
}
/// <summary>
/// 杳询条件
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("查询条件")]
public string SelectWhere
{
get{ return _SelectWhere; }
set{ _SelectWhere = value; }
}
/// <summary>
/// 要绑定的数据控件
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("要绑定的数据控件 ID 值:DataGrid,DataList,Repeater")]
public string BindToDataControl
{
get{ return _btDCtrl; }
set{ _btDCtrl = value; }
}
/// <summary>
/// 当前页码索引
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("当前页码索引")]
public int CurPageIndex
{
get{ return _CurPageIndex; }
set{ _CurPageIndex = value; }
}
/// <summary>
/// 排序字段
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("排序字段")]
public string SortField
{
get{ return _SortField; }
set{ _SortField = value;}
}
/// <summary>
/// 分页记录条数
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("25"),Description("分页记录条数")]
public int PageSize
{
get{ return _PageSize; }
set{ _PageSize = value; }
}
/// <summary>
/// 查询数据来源表格
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("数据表")]
public string SelectTableName
{
get{ return _TableName; }
set{ _TableName = value;}
}
/// <summary>
/// 查询字段
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("从数据表中读取出来的字段")]
public string SelectFields
{
get{ return _SelectFields; }
set{ _SelectFields = value; }
}
/// <summary>
/// 水平对齐方式
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue("100%"),Description("水平对齐方式")]
public DataPager.HorizontalAlign Align
{
get{ return _HzAlign; }
set{ _HzAlign = value;}
}
/// <summary>
/// 控件宽度
/// </summary>
[Bindable(true),Category("Appearance"),DefaultValue(""),Description("宽度")]
public string Width
{
get{ return _Width; }
set{ _Width = value;}
}
#endregion
#region 控件内部规范
protected override object SaveViewState()
{
ArrayList ary = new ArrayList();
ary.Add(""); //0
ary.Add(this.BindToDataControl); //1
ary.Add(this.CurPageIndex); //2
ary.Add(this.KeyField); //3
ary.Add(this.PageCount); //4
ary.Add(this.PageSize); //5
ary.Add(this.SelectFields); //6
ary.Add(this.SelectWhere); //7
ary.Add(this.SortField); //8
ary.Add(this.SelectTableName); //9
ary.Add(this.NumericPages); //10
ary.Add((int)this.Order); //11
ary.Add((int)this.PageStyle); //12
ary.Add(ItemsCount); //13
ary.Add(this.FirstStr); //14
ary.Add(this.PrevStr); //15
ary.Add(this.NextStr); //16
ary.Add(this.EndStr); //17
ary.Add(this.GoStr); //18
ary.Add(this.NextPrevDisableCss); //19
ary.Add(this.NextPrevEnableCss); //20
ary.Add(this.NextPrevTextBoxCss); //21
ary.Add(this.NumericCurrentPagesCss);//22
ary.Add(this.NumericFormatString); //23
ary.Add(this.NumericPagesCss); //24
ary.Add(this.NumericSeparator); //25
ary.Add(this.TotalCurPageFormatString); //26
ary.Add(this.TotalItemsFormatString); //27
ary.Add(this.TotalPagesFormatString); //28
ary.Add(this.EnableGoVoid); //29
ary.Add(this.AppSettingsKey); //30
ary.Add(this.IndexNumCell); //31
return (object)ary;
}
protected override void LoadViewState(object savedState)
{
ArrayList ary = (ArrayList)savedState;
this.BindToDataControl = ary[1].ToString();
this.CurPageIndex = Convert.ToInt32(ary[2]);
this.KeyField = ary[3].ToString();
//this.PageCount = Convert.ToInt32(ary[4]);
//System.Web.HttpContext.Current.Response.Write(ary[5].ToString());
this.PageSize = Convert.ToInt32(ary[5]);
this.SelectFields = ary[6].ToString();
if(ary[7] != null)
{
this.SelectWhere = ary[7].ToString();
}
if(ary[8] != null)
{
this.SortField = ary[8].ToString();
}
this.SelectTableName = ary[9].ToString();
this.NumericPages = Convert.ToInt32(ary[10]);
this.Order = (DataPager.OrderType)Convert.ToInt32(ary[11]);
this.PageStyle = (DataPager.PagerStyle)Convert.ToInt32(ary[12]);
this._ItemsCount = Convert.ToInt32(ary[13]);
if(ary[14] != null)
{
this.FirstStr = ary[14].ToString();
}
if(ary[15] != null)
{
this.PrevStr = ary[15].ToString();
}
if(ary[16] != null)
{
this.NextStr = ary[16].ToString();
}
if(ary[17] != null)
{
this.EndStr = ary[17].ToString();
}
if(ary[18] != null)
{
this.GoStr = ary[18].ToString();
}
if(ary[19] != null)
{
this.NextPrevDisableCss = ary[19].ToString();
}
if(ary[20] != null)
{
this.NextPrevEnableCss = ary[20].ToString();
}
if(ary[21] != null)
{
this.NextPrevTextBoxCss = ary[21].ToString();
}
if(ary[22] != null)
{
this.NumericCurrentPagesCss = ary[22].ToString();
}
if(ary[23] != null)
{
this.NumericFormatString = ary[23].ToString();
}
if(ary[24] != null)
{
this.NumericPagesCss = ary[24].ToString();
}
if(ary[25] != null)
{
this.NumericSeparator = ary[25].ToString();
}
if(ary[26] != null)
{
this.TotalCurPageFormatString = ary[26].ToString();
}
if(ary[28] != null)
{
this.TotalPagesFormatString = ary[28].ToString();
}
if(ary[27] != null)
{
this.TotalItemsFormatString = ary[27].ToString();
}
this.EnableGoVoid = Convert.ToBoolean(ary[29]);
this.AppSettingsKey = ary[30].ToString();
this.IndexNumCell = Convert.ToInt32(ary[31]);
}
public bool LoadPostData(string postDataKey, NameValueCollection values)
{
this.CurPageIndex = Int32.Parse(values[this.UniqueID]);
return false;
}
public void RaisePostDataChangedEvent()
{
// IPostBackDataHandler 协定的一部分。如果曾经从 LoadPostData 方法返回真
// (表示需要引发更改通知),则被调用。由于
// 始终返回假,则此方法只是一个空操作。
}
public void RaisePostBackEvent(string eventArgument)
{
//this.CurPageIndex = Convert.ToInt32(eventArgument);
GetDataSource();
}
protected override void OnInit(EventArgs e)
{
DataControl = this.Parent.FindControl(this.BindToDataControl);
this.ControlType = DataControl.GetType().ToString();
if(ControlType == "System.Web.UI.WebControls.DataGrid")
{
DataGrid dGrid = (DataGrid)DataControl;
dGrid.SortCommand += new DataGridSortCommandEventHandler(DataGrid_SortCommand);
dGrid.ItemDataBound += new DataGridItemEventHandler(DataGrid_ItemDataBound);
}
}
protected override void OnLoad(EventArgs e)
{
this.DataBind();
}
public override void DataBind()
{
GetDataSourcePageCount();
this.GetDataSource();
base.DataBind ();
}
protected override void Render(HtmlTextWriter output)
{
output.Write("<input type=/"hidden/" name=" + this.UniqueID + " type=text value=" + this.CurPageIndex + ">");
if(this.Width != null)
{
output.Write("<table width=/"" + this.Width + "/">");
}
else
{
output.Write("<table>");
}
output.Write("<tr valign=/"middle/">");
output.Write("<td align=/"left/">");
if(this.TotalItemsFormatString != null)
{
// System.Web.HttpContext.Current.Response.Write(TotalItemsFormatString + "<br>");
// System.Web.HttpContext.Current.Response.Write(TotalCurPageFormatString + "<br>");
// System.Web.HttpContext.Current.Response.Write(TotalPagesFormatString + "<br>");
output.Write(String.Format(TotalItemsFormatString,this._itemCount) + " ");
}
if(this.TotalCurPageFormatString != null)
{
output.Write(String.Format(TotalCurPageFormatString,(this.CurPageIndex + 1)) + " ");
}
if(this.TotalPagesFormatString != null)
{
output.Write(String.Format(TotalPagesFormatString,this.PageCount) + " ");
}
output.Write("</td>");
output.Write("<td align=/"right/">");
if(this.PageStyle == DataPager.PagerStyle.NumericPages)
{
output.Write(this.NumericPageString());
}
else if(this.PageStyle == DataPager.PagerStyle.NextPrev)
{
output.Write(this.NextPrevString());
}
output.Write("</td>");
output.Write("</tr>");
output.Write("</table>");
}
#endregion
#region 私有方法
/// <summary>
/// 取得页码数
/// </summary>
private void GetDataSourcePageCount()
{
try
{
SqlParameter[] arParams = new SqlParameter[9];
arParams[0] = new SqlParameter("@tblName",SqlDbType.VarChar,2000);
arParams[0].Value = this.SelectTableName;
arParams[1] = new SqlParameter("@strGotFields",SqlDbType.VarChar,1000);
arParams[1].Value = this.SelectFields;
arParams[2] = new SqlParameter("@strSort",SqlDbType.VarChar,200);
arParams[2].Value = this.SortField;
arParams[3] = new SqlParameter("@OrderType",SqlDbType.Bit);
arParams[3].Value = false;
arParams[4] = new SqlParameter("@PageSize",SqlDbType.Int);
arParams[4].Value = this.PageSize;
arParams[5] = new SqlParameter("@PageIndex",SqlDbType.Int);
arParams[5].Value = this.CurPageIndex + 1;
arParams[6] = new SqlParameter("@strWhere",SqlDbType.VarChar,2000);
arParams[6].Value = this.SelectWhere;
arParams[7] = new SqlParameter("@isCount",SqlDbType.Bit);
arParams[7].Value = true;
arParams[8] = new SqlParameter("@PKName",SqlDbType.VarChar,200);
arParams[8].Value = this.KeyField;
SqlConnection SqlCon = new SqlConnection(this.ConnectionString);
SqlCon.Open();
SqlCommand DataCmd = new SqlCommand();
DataCmd.Connection = SqlCon;
DataCmd.CommandType = CommandType.StoredProcedure;
DataCmd.CommandText = "GetRecordFromPage";
for(int i=0;i<9;i++)
{
DataCmd.Parameters.Add(arParams[i]);
}
_itemCount = Convert.ToInt32(DataCmd.ExecuteScalar().ToString());
SqlCon.Close();
this._PageCount = Convert.ToInt32(Math.Ceiling( Convert.ToDouble(_itemCount) / Convert.ToDouble(this.PageSize)));
}
catch(Exception ex)
{
Page.Response.Write("PageCount Error:" + ex.Message);
}
//Page.Response.Write(ViewState["CurPageCount"].ToString());
}
/// <summary>
/// 设置数据
/// </summary>
private void GetDataSource()
{
try
{
bool tmp = true;
DataSet ds = new DataSet();
if(itype == OrderType.Desc)
{
tmp = false;
}
SqlParameter[] arParams = new SqlParameter[9];
arParams[0] = new SqlParameter("@tblName",SqlDbType.VarChar,2000);
arParams[0].Value = this.SelectTableName;
arParams[1] = new SqlParameter("@strGotFields",SqlDbType.VarChar,1000);
arParams[1].Value = this.SelectFields;
arParams[2] = new SqlParameter("@strSort",SqlDbType.VarChar,200);
arParams[2].Value = this.SortField;
arParams[3] = new SqlParameter("@OrderType",SqlDbType.Bit);
arParams[3].Value = tmp;
arParams[4] = new SqlParameter("@PageSize",SqlDbType.Int);
arParams[4].Value = this.PageSize;
arParams[5] = new SqlParameter("@PageIndex",SqlDbType.Int);
arParams[5].Value = this.CurPageIndex + 1;
arParams[6] = new SqlParameter("@strWhere",SqlDbType.VarChar,2000);
arParams[6].Value = this.SelectWhere;
arParams[7] = new SqlParameter("@isCount",SqlDbType.Bit);
arParams[7].Value = false;
arParams[8] = new SqlParameter("@PKName",SqlDbType.VarChar,200);
arParams[8].Value = this.KeyField;
SqlConnection SqlCon = new SqlConnection(this.ConnectionString);
SqlCon.Open();
SqlCommand DataCmd = new SqlCommand();
DataCmd.Connection = SqlCon;
DataCmd.CommandType = CommandType.StoredProcedure;
DataCmd.CommandText = "GetRecordFromPage";
for(int i=0;i<9;i++)
{
DataCmd.Parameters.Add(arParams[i]);
}
SqlDataAdapter DataAdapter = new SqlDataAdapter();
DataAdapter.SelectCommand = DataCmd;
DataAdapter.Fill(ds);
SqlCon.Close();
this._datasource = ds.Tables[0].DefaultView;
if(ControlType == "System.Web.UI.WebControls.DataGrid")
{
DataGrid dGrid = (DataGrid)DataControl;
//DataGrid 控件排序样式
if(SortField != null)
{
//Page.Response.Write("<br>SortField:"+SortField);
int i=0;
string strtmp = null;
for(i=0;i<dGrid.Columns.Count;i++)
{
strtmp = dGrid.Columns[i].HeaderText;
strtmp = strtmp.Replace("<font face=/"Webdings/">6</font>","");
strtmp = strtmp.Replace("<font face=/"Webdings/">5</font>","");
dGrid.Columns[i].HeaderText = strtmp;
if(dGrid.Columns[i].SortExpression.ToLower() == this.SortField.ToLower())
{
if(this.Order == OrderType.Desc)
{
dGrid.Columns[i].HeaderText = strtmp + "<font face=/"Webdings/">6</font>";
}
else
{
dGrid.Columns[i].HeaderText = strtmp + "<font face=/"Webdings/">5</font>";
}
}
}
}
dGrid.DataSource = this._datasource;
dGrid.DataBind();
}
else if(ControlType == "System.Web.UI.WebControls.DataList")
{
DataList dList = (DataList)DataControl;
dList.DataSource = this._datasource;
dList.DataBind();
}
else if(ControlType == "System.Web.UI.WebControls.Repeater")
{
Repeater RepList = (Repeater)DataControl;
RepList.DataSource = this._datasource;
RepList.DataBind();
}
}
catch(SqlException ex)
{
Page.Response.Write("ErrorMessage:" + ex.Message);
Page.Response.Write("<br>GetRecordFromPage '" + this.SelectTableName + "','"+this.KeyField+"','"+this.SelectFields+"',"+this.PageSize+","+this.CurPageIndex+",'"+this.Order.ToString()+"','"+this.SelectWhere+"',0,'"+this.SortField+"'");
}
}
/// <summary>
/// 上一页,下一页分页方式
/// </summary>
/// <returns></returns>
private string NextPrevString()
{
StringBuilder sb = new StringBuilder();
if(this.CurPageIndex <= 0)
{
sb.Append("首页");
sb.Append(" ");
sb.Append("上页 ");
}
else
{
sb.Append("<a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=0;" + Page.GetPostBackEventReference(this,"0")+ "/">首页</a>");
sb.Append(" ");
sb.Append("<a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=" + this.UniqueID + ".value*1-1;" + Page.GetPostBackEventReference(this,"0")+ "/">上页</a> ");
}
if(this.CurPageIndex >= (this.PageCount-1))
{
sb.Append("下页");
sb.Append(" ");
sb.Append("末页");
}
else
{
sb.Append("<a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=" + this.UniqueID + ".value*1+1;" + Page.GetPostBackEventReference(this,"0")+ "/">下页</a>");
sb.Append(" ");
sb.Append("<a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=" + (this.PageCount-1).ToString() + ";" + Page.GetPostBackEventReference(this,"0")+ "/">末页</a>");
}
if(this.EnableGoVoid)
{
sb.Append("/n<script>/n");
sb.Append("function Check_" + this.UniqueID + "_GoEnable(obj)/n{");
sb.Append(" var maxPageIndex=" + (this.PageCount - 1).ToString() + ";/n");
sb.Append(" if(isNaN(obj.value) == false && obj.value != '')/n{");
sb.Append(" if(obj.value <= maxPageIndex && obj.value > 0)/n{/n document.forms[0]." + this.UniqueID + ".value=obj.value-1;/n return true;/n}else{/nreturn false;/n}/n");
sb.Append(" }/n");//alert(DataPager1.value);" + this.UniqueID + ".value=obj.value-1;
sb.Append("return false;/n");
sb.Append("}/n");
sb.Append("/n</script>/n");
sb.Append("<input type=/"text/" class=/"" + this.NextPrevTextBoxCss + "/" value=/"" + (this.CurPageIndex + 1).ToString() + "/" id=/"Go_Text_" + this.UniqueID + "/" Name=/"Go_Text_" + this.UniqueID + "/">");
sb.Append(" ");
sb.Append(" ");
sb.Append("<input type=/"button/" class=/"" + this.GoButtonCss + "/" value=/"" + this.GoStr + "/" onclick=/"if(Check_" + this.UniqueID + "_GoEnable(Go_Text_" + this.UniqueID +")==false){return false;}else{" + Page.GetPostBackEventReference(this,"0") + ";}/">");
}
return sb.ToString();
}
/// <summary>
/// 数字分页
/// </summary>
/// <returns></returns>
private string NumericPageString()
{
int max;
int min;
int i,len;
int ShowSize = this.NumericPages;
string tmp = null;
StringBuilder sb = new StringBuilder();
min = Convert.ToInt32(Math.Floor((this.CurPageIndex + 1) / ShowSize)) * ShowSize;
max = min + ShowSize;
len = this.PageCount;
if(max > len)
{
max = len;
}
if(min >= ShowSize)
{
sb.Append("<a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=" + (min-2).ToString() + ";" + Page.GetPostBackEventReference(this, (min-2).ToString())+ "/" title=/"向前翻页/"><font face=webdings>9</font></a> ");
}
for(i = min;i <= max ;i++ )
{
if(i == this.CurPageIndex)
{
tmp = "<font class=/"" + "" + "/">" + (i+1).ToString() + "</font>";
}
else
{
tmp = (i+1).ToString();
}
if(this.NumericFormatString != null)
{
tmp = String.Format(NumericFormatString,tmp);
}
if(i <= max - 1)
{
sb.Append("<a style=/"cursor:hand/" onclick=/"jscript:" + this.UniqueID + ".value=" + i.ToString() + ";" + Page.GetPostBackEventReference(this, i.ToString())+ "/">" + tmp + "</a>");
}
if(i <= max - 2)
{
sb.Append(" " + this.NumericSeparator + " ");
}
else if(i == max - 1 && (max == min + 10))
{
sb.Append(" <a style=/"cursor:hand/" onClick=/"jscript:" + this.UniqueID + ".value=" + i.ToString() + ";" + Page.GetPostBackEventReference(this, i.ToString())+ "/" title=/"向后翻页/"><font face=webdings>:</font></a>");
}
}
return sb.ToString();
}
private void DataGrid_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
this._SortField = e.SortExpression;
string sort = e.SortExpression;
if(_SortField != sort)
{
_SortField = sort;
this.Order = OrderType.Desc;
}
else
{
if(this.Order == OrderType.Desc)
{
this.Order = OrderType.Asc;
}
else
{
this.Order = OrderType.Desc;
}
}
GetDataSource();
}
private void DataGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(this.IndexNumCell >= 0)
{
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
e.Item.Cells[this.IndexNumCell].Text = (e.Item.ItemIndex + this.CurPageIndex * this.PageSize).ToString();
}
}
}
#endregion
}
public class CusPageCtrlDesign : ControlDesigner
{
public override string GetDesignTimeHtml()
{
DataPager control = (DataPager)Component;
string tmp = "<span style=/"font-size:12px;color=#000000;background-color:#f5f5f5;padding:4px;border:1px solid #c7c7c7;border-top:1px solid #c7c7c7;border-left:1px solid #c7c7c7/">";
tmp = tmp + "<strong>数据分页控件</strong>" + control.ID + "</span>";
return tmp;
}
}
}
相关文章推荐
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页) (转)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 【转】通用分页用户控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)
- 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页)