DataList分页控件及调用方法
//DataList分页控件
//UCDLPager.ascx页面代码
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="UCDLPager.ascx.cs" Inherits="ProStencil1.PModel.UCDLPager" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<asp:panel id="divPanel" CssClass="font2" HorizontalAlign="center" Width="100%" runat="server"
Visible="true"><INPUT id="hdPageSize" type="hidden" size="1" name="Hidden13" runat="server"> <INPUT id="hdRowCount" style="WIDTH: 3px; HEIGHT: 22px" type="hidden" size="1" name="Hidden12"
runat="server"> <INPUT id="hdCurrentIndex" style="WIDTH: 7px; HEIGHT: 22px" type="hidden" size="1" value="0"
name="Hidden11" runat="server">·
<asp:Label id="LabelMsg" runat="server"></asp:Label>
<asp:linkbutton id="btnNavFirst" runat="server" CssClass="text6" ForeColor="#336699" CommandName="FIRST"
Text="首页" CausesValidation="False" CommandArgument="FIRST">首页</asp:linkbutton>
<asp:linkbutton id="btnNavPrevious" runat="server" CssClass="text6" ForeColor="#336699" CommandName="PREVIOUS"
Text="前页" CausesValidation="False" CommandArgument="PREVIOUS">前页</asp:linkbutton>
<asp:linkbutton id="btnNavNext" runat="server" CssClass="text6" ForeColor="#336699" CommandName="NEXT"
Text="后页" CausesValidation="False" CommandArgument="NEXT">后页</asp:linkbutton>
<asp:linkbutton id="btnNavLast" runat="server" CssClass="text6" ForeColor="#336699" CommandName="LAST"
Text="末页" CausesValidation="False" CommandArgument="LAST">末页</asp:linkbutton>
<asp:TextBox id="tbPage" runat="server" Width="31px"></asp:TextBox>
<asp:linkbutton id="btnNavGo" runat="server" CssClass="text6" ForeColor="#336699" CommandName="GO"
Text="转到" CausesValidation="False" CommandArgument="next">转到</asp:linkbutton>·
</asp:panel>
//UCDLPager.ascx.cs页面代码
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
public delegate DataTable DataListDelegate();
/// <summary>
/// 您可以任意使用此控件,但请保留此标记。
/// 作者:Nick (http://blog.csdn.net/yu_nan88/)
/// Mail:yu_nan88@126.com
/// </summary>
public class UCDLPager : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Label LabelMsg;
protected System.Web.UI.WebControls.LinkButton btnNavFirst;
protected System.Web.UI.WebControls.LinkButton btnNavPrevious;
protected System.Web.UI.WebControls.LinkButton btnNavNext;
protected System.Web.UI.WebControls.LinkButton btnNavLast;
protected System.Web.UI.WebControls.TextBox tbPage;
protected System.Web.UI.WebControls.LinkButton btnNavGo;
protected System.Web.UI.WebControls.Panel divPanel;
protected System.Web.UI.HtmlControls.HtmlInputHidden hdPageSize;
protected System.Web.UI.HtmlControls.HtmlInputHidden hdRowCount;
protected System.Web.UI.HtmlControls.HtmlInputHidden hdCurrentIndex;
protected System.Web.UI.WebControls.DataList _Datalist1;
protected System.Web.UI.WebControls.Label lab_state;
protected System.Data.DataTable m_dt;
protected DataListDelegate DataListDelegate1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
m_dt = DataListDelegate1();
if(!this.IsPostBack)
{
myPage(m_dt,"first");
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnNavFirst.Click += new System.EventHandler(this.btnNavButton_Click);
this.btnNavPrevious.Click += new System.EventHandler(this.btnNavButton_Click);
this.btnNavNext.Click += new System.EventHandler(this.btnNavButton_Click);
this.btnNavLast.Click += new System.EventHandler(this.btnNavButton_Click);
this.btnNavGo.Click += new System.EventHandler(this.btnNavButton_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
public void SetTarget(DataList p_dl,DataListDelegate p_DataListDelegate1)
{
DataListDelegate1 = p_DataListDelegate1;
_Datalist1 = p_dl;
}
public void SetPageSize(int iPageSize)
{
hdPageSize.Value = iPageSize.ToString();
}
public void SetData(DataTable p_dt)
{
m_dt = p_dt;
}
private void btnNavButton_Click(object sender, System.EventArgs e)
{
LinkButton LinkButton1 = sender as LinkButton;
string strName = LinkButton1.Text.Trim();
switch(strName)
{
case "首页":
myPage(m_dt,"first");
break;
case "前页":
myPage(m_dt,"previous");
break;
case "后页":
myPage(m_dt,"next");
break;
case "末页":
myPage(m_dt,"last");
break;
case "转到":
myPage(m_dt,"go");
break;
}
}
#region page
private void myPage(DataTable p_dt,string strType)
{
//当前页
int iLastIndex = 0 ;
string strLastIndex = hdCurrentIndex.Value;
if(strLastIndex == "0")
iLastIndex = 1;
else
iLastIndex = int.Parse(strLastIndex);
//每页显示行数
int iPageSize = 0 ;
string strPageSize = hdPageSize.Value;
if((strPageSize == "0") | (strPageSize == ""))
iPageSize = 3; //3*3 3行 3 列
else
iPageSize = int.Parse(strPageSize);
hdPageSize.Value = iPageSize.ToString();
//
string strMsg = "共 {0} 条,当前第 {1}/{2} 页";
//
int iCount = p_dt.Rows.Count;
int iStart = 0;
int iLen = 0;
int iPageCount = iCount / iPageSize;
if((iCount % iPageSize) > 0)
iPageCount ++;
else
iPageCount = 1;
int iCurIndex = iLastIndex;
//复制
switch(strType)
{
case "next":
if(iCurIndex < iPageCount)
iCurIndex ++;
iStart = (iCurIndex - 1) * iPageSize;
iLen = iPageSize;
break;
case "previous":
if(!(iCurIndex <= 1))
iCurIndex --;
else
iCurIndex = 1;
iStart = (iCurIndex - 1) * iPageSize;
iLen = iPageSize;
break;
case "first":
iCurIndex = 1;
iStart = 0;
iLen = iPageSize;
break;
case "last":
iCurIndex = iPageCount;
iStart = iCount - iPageSize;
if(iStart < 0)
iStart = 0;
iLen = iPageSize;
break;
case "go":
string strGo = tbPage.Text.Trim();
if(strGo == "")
strGo = "1";
int iIn = int.Parse(strGo);
if((iIn <= iPageCount) & (iIn > 0))
iCurIndex = iIn;
iStart = (iCurIndex - 1) * iPageSize;
iLen = iPageSize;
break;
}
hdCurrentIndex.Value = iCurIndex.ToString();
LabelMsg.Text = string.Format(strMsg,iCount.ToString(),iCurIndex.ToString() ,iPageCount.ToString());
CopyRows(p_dt,iStart,iLen);
SetButtonState(iPageCount,iCurIndex);
}
private void CopyRows(DataTable p_dt,int iStart,int iLen)
{
int istart = iStart;
if(istart <0)
istart = 0;
int iCount = p_dt.Rows.Count;
int iEnd = istart + iLen;
if( iCount < iEnd)
iEnd = iCount;
DataTable dt = p_dt.Clone();
for(int i=iStart; i< iEnd ;i++)
{
DataRow dr = p_dt.NewRow();
dr = p_dt.Rows[i];
DataRow drr = dt.NewRow();
drr.ItemArray = dr.ItemArray;
dt.Rows.Add(drr);
}
_Datalist1.DataSource = dt;
_Datalist1.DataBind();
}
private void SetButtonState(int iPageCount,int iCurIndex)
{
btnNavFirst.Enabled = (iCurIndex > 0);
btnNavPrevious.Enabled = (iCurIndex > 0);
btnNavNext.Enabled = (iCurIndex < iPageCount - 1);
btnNavLast.Enabled = (iCurIndex < iPageCount - 1);
}
#endregion
//调用方法
protected FreeStencil1.Model.UCDLPager UCDLPager1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
lab_TypeId.Text = this.Request.QueryString["id"];
}
UCDLPager1.SetPageSize(40);
UCDLPager1.SetTarget(Datalist1,new DataListDelegate(LoadAllNews));
}
private DataTable LoadAllNews()
{
PictureF pictureF = new PictureF();
DataTable Rdt = pictureF.GetPictureListByPicTypeId(Convert.ToInt64(lab_TypeId.Text.Trim()));
return Rdt;
}