www.pudn.com > WebPager.rar > DataPagerContainer.cs, change:2005-01-24,size:5671b


using System; 
using System.ComponentModel; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Hooyee.Utils; 
 
namespace Hooyee.WebControls { 
	#region Class DataPagerContainer 
	/// <summary> 
	/// 通用的数据翻页控件的容器类。 
	/// </summary> 
	/// <remarks> 
	/// 该类可以作为翻页控件独立使用时的默认容器。该容器本身没有外观。 
	/// </remarks> 
	public sealed class DataPagerContainer : WebControl , IDataPagerContainer , INamingContainer { 
		#region 构造函数 
		/// <summary> 
		/// 初始化 DataPagerContainer 类的新实例。 
		/// </summary> 
		public DataPagerContainer() { 
			this.ID = "PagerContainer"; 
		} 
		/// <summary> 
		/// 使用指定的分页信息初始化 DataPagerContainer 类的新实例。 
		/// </summary> 
		/// <param name="pagerInfo">分页信息</param> 
		public DataPagerContainer( PagerInfo pagerInfo ) : this () { 
			this.pagerInfo = pagerInfo; 
		} 
		#endregion 
 
		#region Properties 
		#region PageApplyType 
		private PageApplyType pageApplyType = PageApplyType.ByUrl; 
		/// <summary> 
		/// 获得或设置使用哪种方式进行 Web 翻页。 
		/// </summary> 
		[Category( "高级属性" ) , Description( "获得或设置使用哪种方式进行 Web 翻页。" ) 
		, BrowsableAttribute( true ) , DefaultValue( PageApplyType.ByUrl )] 
		public PageApplyType PageApplyType { 
			get { 
				return pageApplyType; 
			} 
			set { 
				pageApplyType = value; 
			} 
		} 
		#endregion 
 
		#region PageSize 
		/// <summary> 
		/// 在单页上显示的项数。 
		/// </summary> 
		[Category( "高级属性" ) , Description( "在单页上显示的项数。" ) , BrowsableAttribute( true )] 
		public int PageSize { 
			get { 
				return PagerInfo.PageSize; 
			} 
			set { 
				PagerInfo.PageSize = value; 
			} 
		} 
		#endregion 
 
		#region PagerClass 
		private string pagerClass = "PreNextListJumpPager"; 
		/// <summary> 
		/// 获取或设置翻页控件名称。 
		/// </summary> 
		[Category( "高级属性" ) , Description( "获取或设置翻页控件名称。" ) , BrowsableAttribute( true ) , 
		DefaultValue( "PreNextListJumpPager" ) , Editor( typeof( DataPagerEditor ) , typeof( System.Drawing.Design.UITypeEditor ) )] 
		public string PagerClass { 
			get { 
				return pagerClass; 
			} 
			set { 
				if ( pagerClass == value ) 
					return; 
				pagerClass = value; 
				dataPager = null; 
			} 
		} 
		#endregion 
 
		#region PagerInfo 
		private PagerInfo pagerInfo; 
		/// <summary> 
		/// 获得或设置数据翻页对象。 
		/// </summary> 
		[Category( "高级属性" ) , Description( "获得或设置数据翻页对象。" ) , BrowsableAttribute( true )] 
		public PagerInfo PagerInfo { 
			get { 
				if ( null == pagerInfo ) 
					pagerInfo = new PagerInfo( this.ViewState ); 
				return pagerInfo; 
			} 
			set { 
				pagerInfo = value; 
			} 
		} 
		#endregion 
 
		#region BaseDir 
		private string baseDir = ""; 
		/// <summary> 
		/// 获得或设置基本路径。 
		/// </summary> 
		/// <remarks> 
		/// 基本路径是指该控件所用到的各种资源的基本相对路径。 
		/// </remarks> 
		[Category( "高级属性" ) , Description( "获得或设置基本路径。" ) , BrowsableAttribute( true )] 
		public string BaseDir { 
			get { 
				return baseDir; 
			} 
			set { 
				baseDir = value; 
			} 
		} 
		#endregion 
 
		#region DataPager 
		private IDataPager dataPager; 
		/// <summary> 
		/// 获得数据翻页对象。 
		/// </summary> 
		[Category( "高级属性" ) , Description( "获得数据翻页对象。" ) , BrowsableAttribute( false )] 
		public IDataPager DataPager { 
			get { 
				if ( null == dataPager ) 
					dataPager = CreateDataPager(); 
				return dataPager; 
			} 
		} 
		#endregion 
		#endregion 
		protected override void Render( HtmlTextWriter writer ) { 
			if ( this.Controls.Count == 0 || pageApplyType == PageApplyType.PostBack ) 
				CreateChildControls(); 
 
			base.Render( writer ); 
		} 
 
		protected override void CreateChildControls() { 
			this.Controls.Clear(); 
 
			if ( null == DataPager ) { 
				Literal msg = new Literal(); 
				msg.Text = string.Format( "无法创建翻页控件 {0}。" , pagerClass ); 
				this.Controls.Add( msg ); 
				return; 
			} 
 
			this.Controls.Add( DataPager.Render() ); 
		} 
 
		/// <summary> 
		/// 重写 <see cref = "System.Web.UI.Control.OnLoad"/> 方法。 
		/// </summary> 
		/// <param name = "e">包含事件数据的 <see cref = "EventArgs"/> 对象。</param> 
		protected override void OnLoad( EventArgs e ) { 
			if ( pageApplyType == PageApplyType.ByUrl ) { 
				PagerInfo.WebSupport.ApplyPageUrl( Page ); 
				ChangePageIndex( PagerInfo.WebSupport.UrlPageIndex ); 
			} 
			base.OnLoad( e ); 
		} 
 
		/// <summary> 
		/// 创建翻页控件 
		/// </summary> 
		/// <returns>翻页控件</returns> 
		private IDataPager CreateDataPager() { 
			IDataPager pager = DataPagerFactory.CreateDataPager( pagerClass ); 
			if ( null != pager ) 
				pager.AcceptContainer( this ); 
			return pager; 
		} 
 
		#region PageIndex Changed 
		/// <summary> 
		/// 改变页面索引。 
		/// </summary> 
		/// <param name="newIndex">新的页面索引</param> 
		public void ChangePageIndex( int newIndex ) { 
			pagerInfo.PageIndex = newIndex; 
			if ( this.AfterPageChanged != null ) { 
				DataGridPageChangedEventArgs args = new DataGridPageChangedEventArgs( this , newIndex ); 
				AfterPageChanged( this , args ); 
			} 
		} 
 
		/// <summary> 
		/// 当进行翻页时触发,一般进行数据绑定。 
		/// </summary> 
		/// <remarks> 
		/// 该事件一般发生在页面索引被修改以后,留给容器外界来处理翻页。<BR/> 
		/// <note>请不要在该事件处理方法中再次调用 <B>ChangePageIndex</B> 方法。这将可能造成死循环。</note> 
		/// </remarks> 
		[Category( "分页" ) , Description( "当进行翻页时触发,一般进行数据绑定。" ) , BrowsableAttribute( true )] 
		public event DataGridPageChangedEventHandler AfterPageChanged; 
		#endregion 
	} 
	#endregion 
}