namespace JRDEMS.Web.WebPages
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.ComponentModel ;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for PageList.
/// </summary>
public class PageList : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Label labPages;
protected System.Web.UI.WebControls.ImageButton ImageButton1;
protected System.Web.UI.WebControls.ImageButton imgGo;
protected System.Web.UI.WebControls.ImageButton imagPrevPage;
protected System.Web.UI.WebControls.ImageButton imagNextPage;
protected System.Web.UI.WebControls.ImageButton imagLastPage;
protected System.Web.UI.WebControls.ImageButton imagFirstPage;
protected System.Web.UI.WebControls.Image Image1;
protected System.Web.UI.WebControls.TextBox txtCurrentPage;
public event System.EventHandler PageListClick;
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
SetEnable();
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.imagFirstPage.Click += new System.Web.UI.ImageClickEventHandler(this.PageList_Click);
this.imagPrevPage.Click += new System.Web.UI.ImageClickEventHandler(this.PageList_Click);
this.imagNextPage.Click += new System.Web.UI.ImageClickEventHandler(this.PageList_Click);
this.imagLastPage.Click += new System.Web.UI.ImageClickEventHandler(this.PageList_Click);
this.imgGo.Click += new System.Web.UI.ImageClickEventHandler(this.PageList_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void PageList_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
ImageButton btn=(System.Web.UI.WebControls.ImageButton)sender;
switch(btn.CommandName)
{
case "First":
ViewState["CurrentPageIndex"] = 1;
break;
case "Prev":
ViewState["CurrentPageIndex"] = (CurrentPageIndex > 1) ? CurrentPageIndex - 1 : 1;
break;
case "Next":
ViewState["CurrentPageIndex"] = (PageCount > CurrentPageIndex) ? CurrentPageIndex + 1 : PageCount;
break;
case "Last":
ViewState["CurrentPageIndex"] = PageCount;
break;
case "Go":
BtnGoClick();
break;
default:
break;
}
if (PageListClick!=null)
PageListClick(this,System.EventArgs.Empty);
this.SetEnable();
}
private void BtnGoClick()
{
int selPage=-1;
try
{
selPage=int.Parse(this.txtCurrentPage.Text);
}
catch
{
selPage=-1;
}
if(selPage>0 && selPage<=this.PageCount)
ViewState["CurrentPageIndex"] = selPage;
else
return ;
}
private void SetEnable()
{
this.labPages.Text = this.PageCount.ToString()+" TOTAL";
this.txtCurrentPage.Text =this.CurrentPageIndex.ToString();
if( this.PageCount >1 )
{
bool flagFP = CurrentPageIndex >1;
bool flagNL = CurrentPageIndex < PageCount;
if(flagFP==true)
{
this.imagFirstPage.ImageUrl = "../Images/firstpage_over.gif";
this.imagPrevPage.ImageUrl = "../Images/prevpage_over.gif";
this.imagFirstPage.Attributes.Remove("disabled");
this.imagPrevPage.Attributes.Remove("disabled");
}
else
{
this.imagFirstPage.ImageUrl = "../Images/firstpage_down.gif";
this.imagPrevPage.ImageUrl = "../Images/prevpage_down.gif";
this.imagFirstPage.Attributes.Add("disabled","true");
this.imagPrevPage.Attributes.Add("disabled","true");
}
if(flagNL==true)
{
this.imagNextPage.ImageUrl = "../Images/nextpage_over.gif";
this.imagLastPage.ImageUrl = "../Images/lastpage_over.gif";
this.imagNextPage.Attributes.Remove("disabled");
this.imagLastPage.Attributes.Remove("disabled");
}
else
{
this.imagNextPage.ImageUrl = "../Images/nextpage_down.gif";
this.imagLastPage.ImageUrl = "../Images/lastpage_down.gif";
this.imagNextPage.Attributes.Add("disabled","true");
this.imagLastPage.Attributes.Add("disabled","true");
}
}
else
{
this.imagFirstPage.Attributes.Add("disabled","true");
this.imagPrevPage.Attributes.Add("disabled","true");
this.imagNextPage.Attributes.Add("disabled","true");
this.imagLastPage.Attributes.Add("disabled","true");
this.imagFirstPage.ImageUrl = "../Images/firstpage_down.gif";
this.imagPrevPage.ImageUrl = "../Images/prevpage_down.gif";
this.imagNextPage.ImageUrl = "../Images/nextpage_down.gif";
this.imagLastPage.ImageUrl = "../Images/lastpage_down.gif";
}
}
#region Property
/// <summary>
/// 获取或设置当前显示页的索引。
/// </summary>
///<remarks>This property define the to get current page index, or set the current page to display at running time。
///<p> <b>Notes: </b>Different from other index, this page index begins at 1.</p></remarks>
[DefaultValue(1)]
public int CurrentPageIndex
{
get
{
object cpage=ViewState["CurrentPageIndex"];
int pindex=(cpage==null)?1:(int)cpage;
if(pindex>PageCount && PageCount>0)
return PageCount;
else if(pindex<1)
return 1;
return pindex;
}
set
{
int cpage=value;
if(cpage<1)
cpage=1;
else if(cpage>this.PageCount)
cpage=this.PageCount;
ViewState["CurrentPageIndex"]=cpage;
SetEnable();
}
}
/// <summary>
/// 获取或设置需要分页的所有记录的总数。
/// </summary>
/// <remarks>
/// 当页面第一次加载时,应以编程方式将从存储过程或Sql语句中返回的数据表中所有要分页的记录的总数赋予该属性,UCListNavigation会将其保存的ViewState中并在页面回发时从ViewState中获取该值,因此避免了每次分页都要访问数据库而影响分页性能。UCListNavigation根据要分页的所有数据的总项数和 <see cref="PageSize"/> 属性来计算显示所有数据需要的总页数,即 <see cref="PageCount"/>的值。
/// </remarks>
[DefaultValue(255)]
public int RecordCount
{
get
{
object obj=ViewState["Recordcount"];
return (obj==null)?0:(int)obj;
}
set
{
ViewState["Recordcount"]=value;
SetEnable();
}
}
/// <summary>
/// 获取或设置每页显示的项数。
/// </summary>
/// <remarks>
/// 该值获取或设置数据呈现控件每次要显示数据表中的的数据的项数,根据该值和 <see cref="RecordCount"/> 来计算显示所有数据需要的总页数,即 <see cref="PageCount"/>的值。</remarks>
/// <example>以下示例将 <see cref="UCListNavigation"/> 设置为允许每页显示8条数据:
/// <code>
/// <![CDATA[
/// ...
/// <Webdiyer:UCListNavigation id="pager" runat="server" PageSize=10 OnPageChanged="ChangePage"/>
/// ...
/// ]]></code></example>
[DefaultValue(20)]
public int PageSize
{
get
{
object obj=ViewState["PageSize"];
if (obj==null)
{
obj=20;
}
return (obj==null)?20:(int)obj;
}
set
{
int pageSize = value;
if (Math.Abs(pageSize) == 0)
pageSize = 20;
ViewState["PageSize"]=pageSize;
SetEnable();
}
}
/// <summary>
/// 获取所有要分页的记录需要的总页数。
/// </summary>
[DefaultValue(1)]
public int PageCount
{
get{return (RecordCount > 0) ? (int)Math.Ceiling((double)RecordCount/(double)PageSize) : 1;}
}
#endregion Property
}
}