guoguihua

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>&nbsp;&nbsp;&nbsp;&nbsp;
<asp:linkbutton id="btnNavFirst" runat="server" CssClass="text6" ForeColor="#336699" CommandName="FIRST"
  Text="首页" CausesValidation="False" CommandArgument="FIRST">首页</asp:linkbutton>&nbsp;&nbsp;
<asp:linkbutton id="btnNavPrevious" runat="server" CssClass="text6" ForeColor="#336699" CommandName="PREVIOUS"
  Text="前页" CausesValidation="False" CommandArgument="PREVIOUS">前页</asp:linkbutton>&nbsp;&nbsp;
<asp:linkbutton id="btnNavNext" runat="server" CssClass="text6" ForeColor="#336699" CommandName="NEXT"
  Text="后页" CausesValidation="False" CommandArgument="NEXT">后页</asp:linkbutton>&nbsp;&nbsp;
<asp:linkbutton id="btnNavLast" runat="server" CssClass="text6" ForeColor="#336699" CommandName="LAST"
  Text="末页" CausesValidation="False" CommandArgument="LAST">末页</asp:linkbutton>&nbsp;&nbsp;
<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>·
&nbsp;&nbsp;&nbsp;&nbsp;</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;
  }

posted on 2006-06-29 18:58  *蝈蝈*  阅读(1935)  评论(0编辑  收藏  举报

导航