Functional Demos

SqlPager分页控件使用说明

日志操作


一、基本说明:

SqlPager是一个基于PagedDataSource的分页控件,此控件有丰富的参数设置,可让用户灵活应对各种情况,现在的功能已算是比较完善的了

主要功能及特性如下:

  • 支持多达11种自定义样式显示
  • 支持多个数据库容器分页,其中包括 GridView、Repeater、DataList 等控件。
  • 支持AJAX分页
  • 已可在同一页面同时使用多个SqlPager控件
  • 支持在母板页里使用
  • 使用缓存技术以提高分页效率
  • 可直接使用SQL语句获取数据源
  • 可使用自定义数据源
  • 可完全自定义分页按钮样式,支持图片按钮
  • 支持排序字段设置和相应的反序方式
二、属性说明:
以下将详细介绍各种属性:(只介绍主要的属性设置)
a.界面相关

  • BorderStyle:设置分页控件边框样式
  • BorderWidth:设置分页控件边框宽度
  • ShowCount:显示统计页数模式,0:'第{0}页/总{1}页' 1:'第{0}页/总{1}页 [每页{2}条/共{3}条记录]' 2:'不显示'
  • ButtonAndTextBoxVisible:获取或设置转到文本框和按钮是否显示,默认为True(只对NumPager样式有效)
  • PagerStyle:设置要显示的样式类型,分别有以下11(点击展开)类:
    
    /// <summary>
    /// 页面样式设置
    /// </summary>
    public enum PagerStyle
    {
    	/// <summary>
    	/// 按钮样式为上下页箭头
    	/// </summary>
    	NextPrev,
    	/// <summary>
    	/// 按钮样式来下拉框页码
    	/// </summary>
    	NumericPages,
    	/// <summary>
    	/// 按钮和下拉框页码一起显示
    	/// </summary>
    	NextAndNumeric,
    	/// <summary>
    	/// 自定义样式,可自定文本
    	/// </summary>
    	CustomStyle,
    	/// <summary>
    	/// 自定义样式,可自定文本,同时显示下拉页码
    	/// </summary>
    	CustomAndNumeric,
    	/// <summary>
    	/// 无刷新箭头式按钮
    	/// </summary>
    	AjaxNext,
    	/// <summary>
    	/// 无刷新箭头式按钮加下拉页码
    	/// </summary>
    	AjaxNextAndNum,
    	/// <summary>
    	/// 无刷新下拉框按钮
    	/// </summary>
    	AjaxNumeric,
    	/// <summary>
    	/// 自定义无刷新分页
    	/// </summary>
    	AjaxCustomPages,
    	/// <summary>
    	/// 自定义无刷新和下拉框页码
    	/// </summary>
    	AjaxCustomAndNumeric,
    	/// <summary>
    	/// 数字页码样式
    	/// </summary>
    	NumPager,
    	/// <summary>
    	/// 使用自定义CSS产生的数字页码样式 (新)
    	/// </summary>
        NumPagerWithCSS
    }
    
    


b.页码按钮样式相关

  • FirstButton:获取或设置第一页的文字或图片地址,默认为“第一页”
  • PrveButton:获取或设置上一页的文字或图片地址,默认为“上一页”
  • NextButton:获取或设置下一页的文字或图片地址,默认为“下一页”
  • LastButton:获取或设置最后一页的文字或图片地址,默认为“最后第一页”
  • LinkTextCssClass:获取或设置链接文字或图片地址的CSS类名(只对NumPager样式有效)
  • CurrentNumberColor:获取或设置当前连接数字的颜色(只对NumPager样式有效)
  • LeftPageSize:设置或获取分页左边要显示的页码数,默认为5(只对NumPager样式有效)
  • RightPageSize:设置或获取分页右边要显示的页码数,默认为5(只对NumPager样式有效)
  • LinkNumberWidth:设置或获取连接数字单元格的宽度,默认为16px(只对NumPager样式有效)
  • LinkNumberHeight:设置或获取连接数字单元格的高度,默认为16px(只对NumPager样式有效)
  • ButtonText:获取或设置转到按钮文本或图片(只对NumPager样式有效)
  • ButtonType:获取或设置转到按钮类型。可以为:ButtonType.Button,ButtonType.Image。(只对NumPager样式有效)
  • TextBoxWidth:获取或设置文本框宽度,默认为4(只对NumPager样式有效)
  • (3.3 new)PaterElementID:分页控件所在元素的ID,以此ID来设置分页样式(只对NumPagerWithCSS样式有效)


c.数据源相关

  • ControlToPaginate:绑定的数据容器控件ID
  • ContentPlaceHolderID:所在当前母板页ID(如不使用母板页,则不需设置)
  • PaternalID:分页控件所在父级元素ID,如DIV等元素
  • ItemsPerPage:每页显示记录数
  • ToolTip:在使用数字页码样式(NumPager)时,鼠标放上去时显示的提示文本
  • UseCustomDataSource:是否使用自定义数据源,值为true/false
  • CustomDataSource:指定自定义数据源,DataSet类型
  • SelectCommand:设置SQL查询语句,使用此属性,必须将UseCustomDataSource设为false
  • SortField:排序字段
  • SortStyle:排序方式,枚举类型SortStyle.DESC/SortStyle.ASC
  • CacheDuration:设置缓存的持续时间,默认为60秒
  • (3.3 new)ClientSetPager:设置客户端的分页函数,for AJAX,但必须实现2个参数,如 setPageTo = function(paternalID, pageIndex),分页控件所在的父控件ID,一般是所在的DIV的ID,另一个是当前页数,具体实现看本站示例
三、使用说明:
SqlPager使用其实很简单,只需在页面添加相应的控件代码,然后在后台进行绑定调用就可以了,只是如果要使用AJAX,还就需添加一些JS代码,以下是使用的步骤:

1.添加HTML前台控件代码,关于控件属性设置,请参照上述部分:

<!--在页面顶部添加控件的引用-->
<%@ Register Assembly="Winson.Framework" Namespace="Winson.Framework.Controls" TagPrefix="SqlPager" %>


<div id="GridViewShow">
    <asp:GridView ID="GridView1" runat="server" Width="600" EnableViewState="False" AutoGenerateColumns="False"
      CellPadding="4" ForeColor="#333333" GridLines="None">
       <Columns>
			<asp:BoundField DataField="ID" HeaderText="ID" />
			<asp:BoundField DataField="Name" HeaderText="姓名" />
			<asp:BoundField DataField="Age" HeaderText="年龄" />
			<asp:BoundField DataField="Datetime" HeaderText="日期" />
       </Columns>
		<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
		<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
		<EditRowStyle BackColor="#999999" />
		<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
		<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
		<HeaderStyle BackColor="#3366FF" Font-Bold="True" ForeColor="White" />
		<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
	</asp:GridView>
	<br />
	<SqlPager:SqlPager ID="SqlPager1" runat="server" Width="600" ControlToPaginate="GridView1" ItemsPerPage="10" BorderStyle="None" ShowCount="1" BackColor="#ffffff" PagerStyle="AjaxCustomAndNumeric"   BorderWidth="0" ContentPlaceHolderID="ContentPlaceHolder1" PaternalID="GridViewShow" ></SqlPager:SqlPager>
</div>

2.添加JS代码以实现AJAX分页:
主要是实现 setPageTo(paternalID, pageIndex) 方法,以下是结合了jQuery一起实现的AJAX,你也可以自行去实现此方法,只是有2个参数要分别传入后台处理的

//paternalID 为分页控件所在的父级元素ID
//pageIndex 为当前所在页面
setPageTo = function(paternalID, pageIndex){
	 $("#"+paternalID).block({  
			message: $('#Loading'),
	   css: {                
				width: '208px' ,
				height:'15px' ,
				border: '0px',
				left: ($(window).width() -100) /2 + 'px',
				background: "url('images/loading.gif')"				
			}  
		}); 

	 $.ajax({
	   type: "POST",
	   url: "SqlPager.aspx",
	   data: "Action=sqlpager&paterID="+paternalID+"&newIndex="+pageIndex,
	   complete: function(){$("#"+paternalID).unblock();},
	   success: function(result){
			$("#"+paternalID).html(result);		   
	   }
	 });
}
3.添加后台数据处理代码:

Test test = new Test();
//NameValueCollection conditionValue = new NameValueCollection();
//conditionValue["name like"] = "sdf";
//DataSet testds = test.GetDataSet(conditionValue);//可添加条件获取
DataSet testds = test.GetDataSet(null);//获取全部数据直接用null

//绑定分页控件
SqlPager1.UseCustomDataSource = true;
SqlPager1.CustomDataSource = testds;
SqlPager1.DataBind();

//使用AJAX分页,返回数据并显示
private void PageChange1()
{
	int newPageIndex = Convert.ToInt32(Request["newIndex"]);
	SqlPager1.GoToPage(newPageIndex);
	StringWriter writer1 = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
	HtmlTextWriter writer2 = new HtmlTextWriter(writer1);

	if (GridView1 != null)
	{
		GridView1.Visible = true;
		GridView1.RenderControl(writer2);
	}
	SqlPager1.RenderControl(writer2);
	writer2.Flush();
	writer2.Close();
	Response.Write(writer1.ToString());
	Response.End();
}
经过以上3步设置,就可以使用SqlPager分页控件了。
四、效果演示:

注:以下演示均以WinsonFrameDB数据库的 Test 表为例:

1、GridView分页:


ID姓名年龄日期
5555515 
6Test15 
7Test15 
8Test15 
10Test15 
11Test15 
12Test15 
13Test15 
14a1 
15w1 

第1页/总6页 [每页10条/共53条记录]第一页 上一页 下一页 最后一页    选择页数:

前台HTML代码:

<!--在页面顶部添加控件的引用-->
<%@ Register Assembly="Winson.Framework" Namespace="Winson.Framework.Controls" TagPrefix="SqlPager" %>

<div id="GridViewShow">
    <asp:GridView ID="GridView1" runat="server" Width="600" EnableViewState="False" AutoGenerateColumns="False"
      CellPadding="4" ForeColor="#333333" GridLines="None">
       <Columns>
			<asp:BoundField DataField="ID" HeaderText="ID" />
			<asp:BoundField DataField="Name" HeaderText="姓名" />
			<asp:BoundField DataField="Age" HeaderText="年龄" />
			<asp:BoundField DataField="Datetime" HeaderText="日期" />
       </Columns>
		<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
		<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
		<EditRowStyle BackColor="#999999" />
		<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
		<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
		<HeaderStyle BackColor="#3366FF" Font-Bold="True" ForeColor="White" />
		<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
	</asp:GridView>
	<br />
	<SqlPager:SqlPager ID="SqlPager1" runat="server" Width="600" ControlToPaginate="GridView1" ItemsPerPage="10" BorderStyle="None" ShowCount="1" BackColor="#ffffff" PagerStyle="AjaxCustomAndNumeric"   BorderWidth="0" ContentPlaceHolderID="ContentPlaceHolder1" PaternalID="GridViewShow" ></SqlPager:SqlPager>
</div>
前台JS代码:

//paternalID 为分页控件所在的父级元素ID
//pageIndex 为当前所在页面
setPageTo = function(paternalID, pageIndex){
	 $("#"+paternalID).block({  
			message: $('#Loading'),
	   css: {                
				width: '208px' ,
				height:'15px' ,
				border: '0px',
				left: ($(window).width() -100) /2 + 'px',
				background: "url('images/loading.gif')"				
			}  
		}); 

	 $.ajax({
	   type: "POST",
	   url: "SqlPager.aspx",
	   data: "Action=sqlpager&paterID="+paternalID+"&newIndex="+pageIndex,
	   complete: function(){$("#"+paternalID).unblock();},
	   success: function(result){
			$("#"+paternalID).html(result);		   
	   }
	 });
}
后台代码:

Test test = new Test();
//NameValueCollection conditionValue = new NameValueCollection();
//conditionValue["name like"] = "sdf";
//DataSet testds = test.GetDataSet(conditionValue);//可添加条件获取
DataSet testds = test.GetDataSet(null);//获取全部数据直接用null

//绑定分页控件
SqlPager1.UseCustomDataSource = true;
SqlPager1.CustomDataSource = testds;
SqlPager1.DataBind();

//使用AJAX分页,返回数据并显示
private void PageChange1()
{
	int newPageIndex = Convert.ToInt32(Request["newIndex"]);
	SqlPager1.GoToPage(newPageIndex);
	StringWriter writer1 = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
	HtmlTextWriter writer2 = new HtmlTextWriter(writer1);

	if (GridView1 != null)
	{
		GridView1.Visible = true;
		GridView1.RenderControl(writer2);
	}
	SqlPager1.RenderControl(writer2);
	writer2.Flush();
	writer2.Close();
	Response.Write(writer1.ToString());
	Response.End();
}

2、DataList分页:


ID:5
姓名:5555
年龄:15
日期:
ID:7
姓名:Test
年龄:15
日期:
ID:10
姓名:Test
年龄:15
日期:
ID:12
姓名:Test
年龄:15
日期:
ID:14
姓名:a
年龄:1
日期:
ID:6
姓名:Test
年龄:15
日期:
ID:8
姓名:Test
年龄:15
日期:
ID:11
姓名:Test
年龄:15
日期:
ID:13
姓名:Test
年龄:15
日期:
ID:15
姓名:w
年龄:1
日期:

共有6页,当前1页/6   第一页 上一页  1 2 3 4 5 6  下一页 最后一页 

前台HTML代码:

<div id="DataListShow">            
     <asp:DataList ID="DataList1" runat="server" BackColor="White" 
        BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
        GridLines="Horizontal"  RepeatColumns="5">        
                <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
                <AlternatingItemStyle BackColor="#F7F7F7" />
                <ItemStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
                <SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
                <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
                <ItemTemplate>
				ID:<%#DataBinder.Eval(Container.DataItem, "id" )%><br />
				姓名:<%#DataBinder.Eval(Container.DataItem, "name" )%><br />
				年龄:<%#DataBinder.Eval(Container.DataItem, "age" )%><br />
				日期:<%#DataBinder.Eval(Container.DataItem, "Datetime")%><br />
				</ItemTemplate>
    </asp:DataList>           
    <br />
    <SqlPager:SqlPager ID="SqlPager2" runat="server" Width="600" ControlToPaginate="DataList1" ItemsPerPage="10" BorderStyle="None" ShowCount="2" BackColor="#ffffff" PagerStyle="NumPager"   BorderWidth="0" ContentPlaceHolderID="ContentPlaceHolder1" PaternalID="DataListShow" ></SqlPager:SqlPager>
</div>
前台JS代码:

//paternalID 为分页控件所在的父级元素ID
//pageIndex 为当前所在页面
setPageTo = function(paternalID, pageIndex){
	 $("#"+paternalID).block({  
			message: $('#Loading'),
	   css: {                
				width: '208px' ,
				height:'15px' ,
				border: '0px',
				left: ($(window).width() -100) /2 + 'px',
				background: "url('images/loading.gif')"				
			}  
		}); 

	 $.ajax({
	   type: "POST",
	   url: "SqlPager.aspx",
	   data: "Action=sqlpager&paterID="+paternalID+"&newIndex="+pageIndex,
	   complete: function(){$("#"+paternalID).unblock();},
	   success: function(result){
			$("#"+paternalID).html(result);		   
	   }
	 });
}
后台代码:

Test test = new Test();
//NameValueCollection conditionValue = new NameValueCollection();
//conditionValue["name like"] = "sdf";
//DataSet testds = test.GetDataSet(conditionValue);//可添加条件获取
DataSet testds = test.GetDataSet(null);//获取全部数据直接用null

//绑定分页控件
SqlPager2.UseCustomDataSource = true;
SqlPager2.CustomDataSource = testds;
SqlPager2.DataBind();

//使用AJAX分页,返回数据并显示
private void PageChange2()
{
	int newPageIndex = Convert.ToInt32(Request["newIndex"]);
	SqlPager2.GoToPage(newPageIndex);
	StringWriter writer1 = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
	HtmlTextWriter writer2 = new HtmlTextWriter(writer1);

	if (DataList1 != null)
	{
		DataList1.Visible = true;
		DataList1.RenderControl(writer2);
	}
	SqlPager2.RenderControl(writer2);
	writer2.Flush();
	writer2.Close();
	Response.Write(writer1.ToString());
	Response.End();
}

3、Repeater分页:


ID:5
姓名:5555
年龄:15
日期:
ID:6
姓名:Test
年龄:15
日期:
ID:7
姓名:Test
年龄:15
日期:
ID:8
姓名:Test
年龄:15
日期:
ID:10
姓名:Test
年龄:15
日期:

第1页/总11页 [每页5条/共53条记录]第一页 上一页 下一页 最后一页

前台HTML代码:

<div id="RepeaterShow">            
    <asp:Repeater ID="Repeater1" runat="server">
             <ItemTemplate>
            ID:<%#DataBinder.Eval(Container.DataItem, "id" )%><br />
			姓名:<%#DataBinder.Eval(Container.DataItem, "name" )%><br />
			年龄:<%#DataBinder.Eval(Container.DataItem, "age" )%><br />
			日期:<%#DataBinder.Eval(Container.DataItem, "Datetime")%><br />
            </ItemTemplate>
    </asp:Repeater>            
	<br />            
	<SqlPager:SqlPager ID="SqlPager3" runat="server" Width="600" ControlToPaginate="Repeater1" ItemsPerPage="5" BorderStyle="None" ShowCount="1" BackColor="#ffffff" PagerStyle="AjaxCustomPages"   BorderWidth="0" ContentPlaceHolderID="ContentPlaceHolder1" PaternalID="RepeaterShow" ></SqlPager:SqlPager>
</div>  
前台JS代码:

//paternalID 为分页控件所在的父级元素ID
//pageIndex 为当前所在页面
setPageTo = function(paternalID, pageIndex){
	 $("#"+paternalID).block({  
			message: $('#Loading'),
	   css: {                
				width: '208px' ,
				height:'15px' ,
				border: '0px',
				left: ($(window).width() -100) /2 + 'px',
				background: "url('images/loading.gif')"				
			}  
		}); 

	 $.ajax({
	   type: "POST",
	   url: "SqlPager.aspx",
	   data: "Action=sqlpager&paterID="+paternalID+"&newIndex="+pageIndex,
	   complete: function(){$("#"+paternalID).unblock();},
	   success: function(result){
			$("#"+paternalID).html(result);		   
	   }
	 });
}
后台代码:

Test test = new Test();
//NameValueCollection conditionValue = new NameValueCollection();
//conditionValue["name like"] = "sdf";
//DataSet testds = test.GetDataSet(conditionValue);//可添加条件获取
DataSet testds = test.GetDataSet(null);//获取全部数据直接用null

//绑定分页控件
SqlPager3.UseCustomDataSource = true;
SqlPager3.CustomDataSource = testds;
SqlPager3.DataBind();

//使用AJAX分页,返回数据并显示
private void PageChange3()
{
	int newPageIndex = Convert.ToInt32(Request["newIndex"]);
	SqlPager3.GoToPage(newPageIndex);
	StringWriter writer1 = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
	HtmlTextWriter writer2 = new HtmlTextWriter(writer1);

	if (Repeater1 != null)
	{
		Repeater1.Visible = true;
		Repeater1.RenderControl(writer2);
	}
	SqlPager3.RenderControl(writer2);
	writer2.Flush();
	writer2.Close();
	Response.Write(writer1.ToString());
	Response.End();
}

4、GridView分页(3.3新样式演示):


主要演示3.3新版的分页按钮样式
ID姓名年龄日期
5555515 
6Test15 
7Test15 
8Test15 
10Test15 
11Test15 
12Test15 
13Test15 
14a1 
15w1 

  • [ 共有6页,当前1页/6 ]
  • 第一页
  • 上一页
  • 1
  • 2
  • 3
  • 4
  •   

前台HTML代码:

<!--在页面顶部添加控件的引用-->
<%@ Register Assembly="Winson.Framework" Namespace="Winson.Framework.Controls" TagPrefix="SqlPager" %>

<div id="GridViewShow">
    <asp:GridView ID="GridView1" runat="server" Width="600" EnableViewState="False" AutoGenerateColumns="False"
      CellPadding="4" ForeColor="#333333" GridLines="None">
       <Columns>
			<asp:BoundField DataField="ID" HeaderText="ID" />
			<asp:BoundField DataField="Name" HeaderText="姓名" />
			<asp:BoundField DataField="Age" HeaderText="年龄" />
			<asp:BoundField DataField="Datetime" HeaderText="日期" />
       </Columns>
		<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
		<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
		<EditRowStyle BackColor="#999999" />
		<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
		<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
		<HeaderStyle BackColor="#3366FF" Font-Bold="True" ForeColor="White" />
		<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
	</asp:GridView>
	<br />
	<SqlPager:SqlPager ID="SqlPager4" runat="server" Width="600" ControlToPaginate="rptShowContent"
             BorderStyle="None" BackColor="#ffffff" PagerStyle="NumPagerWithCSS" LeftPageSize=2 RightPageSize=2
            BorderWidth="0" ContentPlaceHolderID="ContentPlaceHolder1" PaterElementID="pagination-flickr" 
            PaternalID="left" ></SqlPager:SqlPager>
</div>
前台JS代码:

//paternalID 为分页控件所在的父级元素ID
//pageIndex 为当前所在页面
setPageTo = function(paternalID, pageIndex){
	 $("#"+paternalID).block({  
			message: $('#Loading'),
	   css: {                
				width: '208px' ,
				height:'15px' ,
				border: '0px',
				left: ($(window).width() -100) /2 + 'px',
				background: "url('images/loading.gif')"				
			}  
		}); 

	 $.ajax({
	   type: "POST",
	   url: "SqlPager.aspx",
	   data: "Action=sqlpager&paterID="+paternalID+"&newIndex="+pageIndex,
	   complete: function(){$("#"+paternalID).unblock();},
	   success: function(result){
			$("#"+paternalID).html(result);		   
	   }
	 });
}
后台代码:

Test test = new Test();
//NameValueCollection conditionValue = new NameValueCollection();
//conditionValue["name like"] = "sdf";
//DataSet testds = test.GetDataSet(conditionValue);//可添加条件获取
DataSet testds = test.GetDataSet(null);//获取全部数据直接用null

//绑定分页控件
SqlPager1.UseCustomDataSource = true;
SqlPager1.CustomDataSource = testds;
SqlPager1.DataBind();

//使用AJAX分页,返回数据并显示
private void PageChange1()
{
	int newPageIndex = Convert.ToInt32(Request["newIndex"]);
	SqlPager4.GoToPage(newPageIndex);
	StringWriter writer1 = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
	HtmlTextWriter writer2 = new HtmlTextWriter(writer1);

	if (GridView2 != null)
	{
		GridView2.Visible = true;
		GridView2.RenderControl(writer2);
	}
	SqlPager4.RenderControl(writer2);
	writer2.Flush();
	writer2.Close();
	Response.Write(writer1.ToString());
	Response.End();
}