职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1486|回复: 0

AspNetPager分页控件--使用方法

[复制链接]
那日多吉 发表于 2007-8-18 15:00 | 显示全部楼层 |阅读模式
//此源代码仅供学习参考,不得用作任何商业用途;
//若需修改并重新编译该控件,请保留完整的源代码的版权信息!
//有关控件升级及新控件发布信息,请留意 www.webdiyer.com
using System;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections.Specialized;
using System.Text;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
namespace Wuqi.Webdiyer
{
#region AspNetPager Server Control
#region 控件说明及示例
/// <summary>
/// 用于ASP.NET Web应用程序中对数据进行分页的的服务器控件。
/// </summary>
/// <remarks>不同于DataGrid控件,AspNetPager分页控件本身并不显示任何数据,而只显示页导航元素,数据在页面上的显示方式与该控件无关。该控件可以为DataGrid、DataList、Repeater以及自定义控件进行分页,配合Sql存储过程,分页性能较使用DataGrid分页有明显提升,尤其是当数据量大时性能可提升数倍!
/// <p>AspNetPager 2.0 中新增了通过Url来分页的功能,这使得访问者可以直接输入相应的Url来访问任何页面,并且搜索引擎也可以直接检索每个页面,若使用DataGrid的分页功能,这是无法实现的。</p>
/// <p>要使用 AspNetPager 分页控件,必须最少指定它的 <see cref=\"RecordCount\"/> 属性,指定并编写 <see cref=\"ageChanged\"/> 事件的处理程序。
/// <see cref=\"RecordCount\"/> 属性指定要分页的所有数据的总项数,若未指定该值或该值小于等于 <see cref=\"ageSize\"/> ,则AspNetPager控件不会显示任何内容。
/// 若未指定并编写 <see cref=\"ageChanged\"/> 事件处理程序,则当用户点击页导航元素或在页索引文本框中手式输入页索引并提交时AspNetPager不会跳转到指定的页。
/// AspNetPager控件的分页方法和DataGrid基本相同,即在它的 <see cref=\"ageChanged\"/> 事件处理程序中将传递事件数据的 <see cref=\"ageChangedEventArgs\"/> 的 <see cref=\"ageChangedEventArgs.NewPageIndex\"/>值赋给 AspNetPager的 <see cref=\"CurrentPageIndex\"/>属性,然后重新将新的数据与数据显示控件绑定。 </p></remarks>
/// <example>以下示例说明如何用AspNetPager对DataGrid进行分页。
/// <code><![CDATA[
///<%@ Page Language=\"C#\"%>
///<%@ Import Namespace=\"System.Data\"%>
///<mailto:%@Import[/url] Namespace=\"System.Data.SqlClient\"%>
///<mailto:%@Import[/url] Namespace=\"System.Configuration\"%>
///<mailto:%@Register[/url] TagPrefix=\"Webdiyer\" Namespace=\"Wuqi.Webdiyer\" Assembly=\"aspnetpager\"%>
///<HTML>
///<HEAD>
///<TITLE>Welcome to Webdiyer.com </TITLE>
/// <script runat=\"server\">
/// SqlConnection conn;
/// SqlCommand cmd;
/// void Page_Load(object src,EventArgs e)
/// {
/// conn=new SqlConnection(ConfigurationSettings.AppSettings[\"ConnStr\"]);
/// if(!Page.IsPostBack)
/// {
/// cmd=new SqlCommand(\"GetNews\",conn);
/// cmd.CommandType=CommandType.StoredProcedure;
/// cmd.Parameters.Add(\"@pageindex\",1);
/// cmd.Parameters.Add(\"@pagesize\",1);
/// cmd.Parameters.Add(\"@docount\",true);
/// conn.Open();
/// pager.RecordCount=(int)cmd.ExecuteScalar();
/// conn.Close();
/// BindData();
/// }
/// }
///
/// void BindData()
/// {
/// cmd=new SqlCommand(\"GetNews\",conn);
/// cmd.CommandType=CommandType.StoredProcedure;
/// cmd.Parameters.Add(\"@pageindex\",pager.CurrentPageIndex);
/// cmd.Parameters.Add(\"@pagesize\",pager.PageSize);
/// cmd.Parameters.Add(\"@docount\",false);
/// conn.Open();
/// dataGrid1.DataSource=cmd.ExecuteReader();
/// dataGrid1.DataBind();
/// conn.Close();
/// pager.CustomInfoText=\"记录总数:<font color=\"blue\"><b>\"+pager.RecordCount.ToString()+\"</b></font>\";
/// pager.CustomInfoText+=\" 总页数:<font color=\"blue\"><b>\"+pager.PageCount.ToString()+\"</b></font>\";
/// pager.CustomInfoText+=\" 当前页:<font color=\"red\"><b>\"+pager.CurrentPageIndex.ToString()+\"</b></font>\";
/// }
/// void ChangePage(object src,PageChangedEventArgs e)
/// {
/// pager.CurrentPageIndex=e.NewPageIndex;
/// BindData();
/// }
/// </script>
/// <meta http-equiv=\"Content-Language\" content=\"zh-cn\">
/// <meta http-equiv=\"content-type\" content=\"text/html;charset=gb2312\">
/// <META NAME=\"Generator\" CONTENT=\"EditPlus\">
/// <META NAME=\"Author\" CONTENT=\"Webdiyer(mailto:yhaili@21cn.com[/url])\">
/// </HEAD>
/// <body>
/// <form runat=\"server\" ID=\"Form1\">
/// <aspataGrid id=\"dataGrid1\" runat=\"server\" />
/// <Webdiyer:AspNetPager id=\"pager\"
/// runat=\"server\"
/// PageSize=\"8\"
/// NumericButtonCount=\"8\"
/// ShowCustomInfoSection=\"left\"
/// PagingButtonSpacing=\"0\"
/// ShowInputBox=\"always\"
/// CSSClass=\"mypager\"
/// HorizontalAlign=\"right\"
/// OnPageChanged=\"ChangePage\"
/// SubmitButtonText=\"转到\"
/// NumericButtonTextFormatString=\"[{0}]\"/>
/// </form>
/// </body>
///</HTML>
/// ]]>
/// </code>
/// <p>下面是该示例所用的Sql Server存储过程:</p>
/// <code>
/// <![CDATA[
///CREATE procedure GetNews
/// (@pagesize int,
/// @pageindex int,
/// @docount bit)
/// as
/// set nocount on
/// if(@docount=1)
/// select count(id) from news
/// else
/// begin
/// declare @indextable table(id int identity(1,1),nid int)
/// declare @PageLowerBound int
/// declare @PageUpperBound int
/// set @PageLowerBound=(@pageindex-1)*@pagesize
/// set @PageUpperBound=@PageLowerBound+@pagesize
/// set rowcount @PageUpperBound
/// insert into @indextable(nid) select id from news order by addtime desc
/// select O.id,O.source,O.title,O.addtime from news O,@indextable t where O.id=t.nid
/// and t.id>@PageLowerBound and t.id < = @PageUpperBound order by t.id
/// end
/// set nocount off
///GO
/// ]]>
/// </code></example>
#endregion
[DefaultProperty(\"ageSize\")]
[DefaultEvent(\"ageChanged\")]
[ParseChildren(false)]
[PersistChildren(false)]
[Description(\"专用于ASP.Net Web应用程序的分页控件\")]
[Designer(typeof(PagerDesigner))]
[ToolboxData(\"<{0}:AspNetPager runat=server></{0}:AspNetPager>\")]
public class AspNetPageranel,INamingContainer,IPostBackEventHandler,IPostBackDataHandler
{
private string cssClassName;
private string urlPageIndexName=\"page\";
private bool urlPaging=false;
private string inputPageIndex;
private string currentUrl=null;
private NameValueCollection urlParams=null; #region Properties #region Navigation Buttons /// <summary>
/// 获取或设置一个值,该值批示当鼠标指针悬停在导航按钮上时是否显示工具提示。
/// </summary>
[Browsable(true),
Category(\"导航按钮\"), DefaultValue(true), Description(\"指定当鼠标停留在导航按钮上时,是否显示工具提示\")]
public bool ShowNavigationToolTip
{
get
{
object obj=ViewState[\"ShowNavigationToolTip\"];
return (obj==null)?truebool)obj;
}
set
{
ViewState[\"ShowNavigationToolTip\"]=value;
}
} /// <summary>
/// 获取或设置导航按钮工具提示文本的格式。
/// </summary>
[Browsable(true),
Category(\"导航按钮\"),
DefaultValue(\"转到第{0}页\"),
Description(\"页导航按钮工具提示文本的格式\")]
public string NavigationToolTipTextFormatString
{
get
{
object obj=ViewState[\"NavigationToolTipTextFormatString\"];
return (obj==null)?\"转到第{0}页\"string)obj;
}
set
{
string tip=value;
if(tip.Trim().Length<1&&tip.IndexOf(\"{0}\")<0)
tip=\"{0}\";
ViewState[\"NavigationToolTipTextFormatString\"]=tip;
}
} /// <summary>
/// 获取或设置一个值,该值指示是否将页索引按钮用中文数字代替。
/// </summary>
/// <remarks>
/// 将该值设为true并且未使用图片按钮时,页索引按钮中的数值1、2、3等将会被中文字符一、二、三等代替。
/// </remarks>
[Browsable(true),
Category(\"导航按钮\"),
DefaultValue(false),
Description(\"是否将页索引数值按钮用中文数字一、二、三等代替\")]
public bool ChinesePageIndex
{
get
{
object obj=ViewState[\"ChinesePageIndex\"];
return (obj==null)?falsebool)obj;
}
set
{
ViewState[\"ChinesePageIndex\"]=value;
}
} /// <summary>
/// 获取或设置页索引数值导航按钮上文字的显示格式。
/// </summary>
/// <value>
/// 字符串,指定页索引数值按钮上文字的显示格式,默认值为<see cref=\"String.Empty\"/>,即未设置该属性。</value>
/// <remarks>
/// 使用NumericButtonTextFormatString属性指定页索引数值按钮的显示格式,如未设置该值时索引按钮文本将会是:1 2 3 ...,设置该值将改变索引按钮文本的显示格式,
/// 如将该值设为“[{0}]”则索引文本会显示为:[1] [2] [3] ...,将该值设为“-{0}-”则会使索引文本变为:-1- -2- -3- ...。
/// </remarks>
[Browsable(true),
DefaultValue(\"\"),
Category(\"导航按钮\"),
Description(\"页索引数值按钮上文字的显示格式\")]
public string NumericButtonTextFormatString
{
get
{
object obj=ViewState[\"NumericButtonTextFormatString\"];
return (obj==null)?String.Emptystring)obj;
}
set
{
ViewState[\"NumericButtonTextFormatString\"]=value;
}
} /// <summary>
/// 获取或设置分页导航按钮的类型,即使用文字还是图片。
/// </summary>
/// <remarks>
/// 要使用图片按钮,您需要准备以下图片:从0到9的十个数值图片(当ShowPageIndex设为true时),第一页、上一页、下一页、最后一页及更多页(...)五个按钮图片(当ShowFirstLast及ShowPrevNext都设为true时),
/// 若需要使当前页索引的数值按钮不同于别的页索引数值按钮,则还需准备当前页索引的按钮图片;
/// 若需要使已禁用的第一页、上一页、下一页及最后一页按钮图片不同于正常的按钮图片,则还需准备这四个按钮在禁用状态下的图片;
/// <p><b>图片文件的命名规则如下:</b></p>
/// <p>从0到9十张数值按钮图片必须命名为“数值+ButtonImageNameExtension+ButtonImageExtension”,其中的ButtonImageNameExtension可以不用设置,
/// ButtonImageExtension是图片文件的后缀名,如 .gif或 .jpg等可以在浏览器中显示的任何图片文件类型。如页索引“1”的图片文件可命名为“1.gif”或“1.jpg”,

/// 当您有两套或更多套图片文件时,可以通过指定ButtonImageNameExtension属性值来区分不同套的图片,如第一套图片可以不用设ButtonImageNameExtension,则图片文件名类似于“1.gif”、“2.gif”
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-17 23:29 , Processed in 0.111933 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表