DataList自定义分页

 private void DataListBind()
  {
   SqlConnection con = new SqlConnection("server=wfserver;database=test;uid =sa;pwd=123;");
   SqlDataAdapter sda = new SqlDataAdapter("select * from Employees",con);
   DataSet ds= new DataSet();

   try
   {
    sda.Fill(ds,"testTable");
    this.lblall.Text = "共 "+Convert.ToString(ds.Tables["testTable"].Rows.Count)+" 条数据";
    PagedDataSource objpage = new PagedDataSource();
    objpage.DataSource =ds.Tables["testTable"].DefaultView;
    objpage.AllowPaging=true;
    objpage.PageSize=5;
    int CurPage;
    if(Request.QueryString["Page"]!=null)
    {
     CurPage = Convert.ToInt32(Request.QueryString["Page"]);
    }
    else
    {
     CurPage = 1;
    }
    this.lblcurpage.Text = "当前第 "+Convert.ToString(CurPage)+" 页";
    objpage.CurrentPageIndex = CurPage -1;
    if(!objpage.IsFirstPage)
    {
     //到上一页
     this.Hyperprev.NavigateUrl = Request.CurrentExecutionFilePath+"?Page="+Convert.ToString(CurPage-1);
    }
    if(!objpage.IsLastPage)
    {
     //到下一页
     this.Hypernext.NavigateUrl = Request.CurrentExecutionFilePath+"?Page="+Convert.ToString(CurPage+1);
    }
    this.DataList1.DataSource = objpage;
    this.DataList1.DataBind();
   }
   catch(Exception error)
   {
    Response.Write(error.ToString());
   }
  }

aspx中的代码:
<asp:datalist id="mydatalist" Runat="server">
     <ItemTemplate>
         <TABLE id="Table2" cellSpacing="0" cellPadding="0" width="400" border="0">
              <TR>
                   <TD width="15"> </TD>
                   <TD width="85" height="22"> </TD>
                   <TD width="211"> </TD>
                   <TD width="80"> </TD>
              </TR>
              <TR>
                   <TD width="15"> </TD>
                   <TD class="ziti" bgColor="#f7eeef" colSpan="3" height="22">回  复:</TD>
              </TR>
              <TR>
                   <TD width="15"></TD>
                   <TD bgColor="#666666" colSpan="3" height="1"></TD>
              </TR>
              <TR>
                   <TD width="15" rowSpan="3"> </TD>
                   <TD class="ziti" vAlign="top" width="85" rowSpan="3">发贴人姓名<BR>
                                               级别:<BR>
                   </TD>
                   <TD class="ziti" vAlign="top" height="22"><IMG height="20" src="images.files/face0.gif" width="20">发表于:<%# DataBinder.Eval(Container.DataItem,"remessage_time") %></TD>
                   <TD class="brown" width="80">回复</TD>
              </TR>
              <TR>
                   <TD colSpan="2" height="5"></TD>
              </TR>
              <TR>
                   <TD><%# DataBinder.Eval(Container.DataItem,"remessage_context") %></TD>
                   <TD width="80"> </TD>
                   <TD width="4"> </TD>
              </TR>
              <TR>
                   <TD width="15"></TD>
                   <TD bgColor="#666666" colSpan="3" height="1"></TD>
              </TR>
         </TABLE>
     </ItemTemplate>
</asp:datalist>
<TABLE id="Table3" cellSpacing="0" cellPadding="0" width="400" border="0">
         <TR>
                   <TD width="15"> </TD>
                   <TD class="ziti" colSpan="3" height="22">共有<asp:label id="lblRecordCount" runat="server" ForeColor="red"></asp:label>条记录  
                                     当前为<asp:label id="lblCurrentPage" runat="server" ForeColor="red"></asp:label>/<asp:label id="lblPageCount" runat="server" ForeColor="red"></asp:label>页
                                     <asp:linkbutton id="lbnPrevPage"runat="server" Text="上一页" CommandName="prev" ></asp:linkbutton><asp:linkbutton id="lbnNextPage" runat="server" Text="下一页" CommandName="next" >下一页</asp:linkbutton></TD>
              <TR>
</table>

CS代码:
using System.Data.SqlClient;
using System.Configuration;

protected System.Web.UI.WebControls.Label lblmcontent;
         protected System.Web.UI.WebControls.Label lblmessagetime;
         protected System.Web.UI.WebControls.Label lblmkind;
         protected System.Web.UI.WebControls.Label lblmauthor;
         protected System.Web.UI.WebControls.Label lblmessagetitle;
         protected System.Web.UI.WebControls.DataList mydatalist;
         protected System.Web.UI.HtmlControls.HtmlForm Form1;
        
         int PageSize,RecordCount,PageCount,CurrentPage;
         protected System.Web.UI.WebControls.Label lblCurrentPage;
         protected System.Web.UI.WebControls.Label lblPageCount;
         protected System.Web.UI.WebControls.LinkButton lbnPrevPage;
         protected System.Web.UI.WebControls.Label lblRecordCount;
         protected System.Web.UI.WebControls.LinkButton lbnNextPage;

         private void Page_Load(object sender, System.EventArgs e)
         {
              // 在此处放置用户代码以初始化页面
              PageSize = 2;
              SqlConnection con=new SqlConnection();
              con.C.AppSettings["ConnectionString"];
              SqlCommand cmd=new SqlCommand();
              cmd.CommandText="select message_title,message_content,message_content,message_time,message_author from message where message_id= '"+Request.QueryString["id"]+"'";
              cmd.C;
              con.Open();
              
              if(!Page.IsPostBack)
              {

                   //设定PageSize

                   SqlDataReader reader=cmd.ExecuteReader();
                   if(reader.Read())
                   {
                       this.lblmauthor.Text=Convert.ToString(reader["message_author"]);
                       this.lblmcontent.Text=Convert.ToString(reader["message_content"]);
                       this.lblmessagetime.Text=Convert.ToString(reader["message_time"]);
                       this.lblmessagetitle.Text=Convert.ToString(reader["message_title"]);
                      
                   }

                   reader.Close();
                  

                   ListBind();
                   CurrentPage = 0;
                   ViewState["PageIndex"] = 0;

                   //计算总共有多少记录
                   RecordCount = CalculateRecord();
                   lblRecordCount.Text = RecordCount.ToString();

                   //计算总共有多少页
                //float pagetemp=0;
                   if((RecordCount%PageSize)==0)
                   PageCount = (RecordCount/PageSize);
                   else
                   PageCount = (RecordCount/PageSize)+1;
                   lblPageCount.Text = PageCount.ToString();
                   ViewState["PageCount"] = PageCount;

         }
         }
       //****************************
         public int CalculateRecord()
         {
              int intCount;
              SqlConnection recon=new SqlConnection();
              recon.C.AppSettings["ConnectionString"];
              SqlCommand recmd=new SqlCommand();
              recmd.CommandText="select count(*) as co from remessage where remessage_fatherid = '"+Request.QueryString["id"]+"'";
              recmd.C;
              recon.Open();
              SqlDataReader reader1=recmd.ExecuteReader();
              if(reader1.Read())
              {
                   intCount = Int32.Parse(reader1["co"].ToString());
              }
              else
              {
                   intCount = 0;
              }
              reader1.Close();
              return intCount;
         }

         ICollection CreateSource()
         {

              int StartIndex;
              SqlConnection recon=new SqlConnection();
              recon.C.AppSettings["ConnectionString"];

              //设定导入的起终地址
              StartIndex = CurrentPage*PageSize;
              string strSel = "select * from remessage where remessage_fatherid = '"+Request.QueryString["id"]+"'";
              DataSet ds = new DataSet();
            
              SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel, recon);
              MyAdapter.Fill(ds,StartIndex,PageSize,"remessage");
              return ds.Tables["remessage"].DefaultView;
         }
          public void ListBind()
         {
              this.mydatalist.DataSource = CreateSource();
              this.mydatalist.DataBind();

              lbnNextPage.Enabled = true;
              lbnPrevPage.Enabled = true;
              if(CurrentPage==(PageCount-1)) lbnNextPage.Enabled = false;
              if(CurrentPage==0) lbnPrevPage.Enabled = false;
              lblCurrentPage.Text = (CurrentPage+1).ToString();

         }

         public void Page_OnClick(Object sender,CommandEventArgs e)
         {
              CurrentPage = (int)ViewState["PageIndex"];
              PageCount = (int)ViewState["PageCount"];

              string cmd = e.CommandName;
              //判断cmd,以判定翻页方向
              switch(cmd)
              {
                   case "next":
                       if(CurrentPage<(PageCount-1))
                       {
                            CurrentPage++;
                       }
                       break;
                   case "prev":
                       if(CurrentPage>0) CurrentPage--;
                       break;
              }

              ViewState["PageIndex"] = CurrentPage;

              ListBind();
         }

******************************
<%@ Page language="c#" Codebehind="Page.cs" AutoEventWireup="false" Inherits="MikeCat_app2.MikeCat_DataListPage" %>
<HTML>
<HEAD>
<title>欢迎光临</title>
<meta name="GENERATOR" C>
<meta name="CODE_LANGUAGE" C>
<meta name="vs_defaultClientScript" c>
<meta name="vs_targetSchema" chttp://schemas.microsoft.com/intellisense/ie5" target=_blank>http://schemas.microsoft.com/intellisense/ie5">
<STYLE>
TD { FONT-SIZE: 12px }
.font { FONT-SIZE: 12px }
</STYLE>
</HEAD>
<body MS_POSITI>
<form id="form1" runat="server">
   <asp:Label id="Label5" runat="server" Font-Bold="True" style="LEFT: 184px; POSITION: absolute; TOP: 24px">DATALIST分页</asp:Label>
   <asp:datalist id="dList" Runat="server" HeaderStyle-BackColor="SteelBlue" Width="100%" EnableViewState="False"
    style="LEFT: 8px; POSITION: absolute; TOP: 64px">
    <HeaderTemplate>
     <TABLE cellSpacing="0" cellPadding="0" width="100%">
      <TR>
       <TD align="left">
        <FONT color="#ffffff">BLOGID</FONT></TD>
       <TD align="left">
        <FONT color="#ffffff">日志标题</FONT></TD>
       <TD align="left">
        <FONT color="#ffffff">日志内容</FONT></TD>
      </TR>
   </HeaderTemplate>
    <FooterTemplate>
     </TABLE>
    </FooterTemplate>
    <ItemTemplate>
     <tr>
      <td><%# DataBinder.Eval(Container.DataItem, "blogid") %></td>
      <td><%# DataBinder.Eval(Container.DataItem, "日志标题") %></td>
      <td><%# DataBinder.Eval(Container.DataItem, "日志内容") %></td>
     </tr>
    </ItemTemplate>
   </asp:datalist><font>
    <asp:Panel id="Panel1" runat="server" Width="552px" Height="48px" style="LEFT: 160px; POSITION: absolute; TOP: 288px"
     CssClass="font">
     <asp:linkbutton id="fp1" runat="server" CommandName="first">首页</asp:linkbutton>
     <asp:linkbutton id="pp1" runat="server" CommandName="prev">上一页</asp:linkbutton>
     <asp:linkbutton id="np1" runat="server" CommandName="next">下一页</asp:linkbutton>
     <asp:linkbutton id="lp1" runat="server" CommandName="last">尾页</asp:linkbutton>
     <asp:label id="Label1" runat="server">页次</asp:label>
     <asp:Label id="cp1" runat="server"></asp:Label>
     <asp:label id="Label2" runat="server">/</asp:label>
     <asp:Label id="pc1" runat="server"></asp:Label>

     <asp:label id="Label3" runat="server">每页记录数</asp:label>
     <asp:Label id="rc1" runat="server"></asp:Label>
     <asp:Label id="Label4" runat="server">选择跳转页码</asp:Label>
     <asp:DropDownList id="jp1" runat="server" AutoPostBack="True"></asp:DropDownList>
    </asp:Panel></font></form>
</body>
</HTML>


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
namespace MikeCat_app2
{
/// <summary>
/// MikeCat_DataListPage 的摘要说明。
/// *****************************************
/// 功能:DataList数据分页
/// *****************************************
/// </summary>
public class MikeCat_DataListPage : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataList dList;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.LinkButton pp1;
protected System.Web.UI.WebControls.LinkButton lp1;
protected System.Web.UI.WebControls.LinkButton np1;
protected System.Web.UI.WebControls.LinkButton fp1;
int PageSize,RecordCount,PageCount,CurrentPage;
protected System.Web.UI.WebControls.Panel Panel1;
protected System.Web.UI.WebControls.Label pc1;
protected System.Web.UI.WebControls.Label rc1;
protected System.Web.UI.WebControls.Label cp1;
protected System.Web.UI.WebControls.Label Label4;
protected System.Web.UI.WebControls.DropDownList jp1;
protected System.Web.UI.WebControls.Label Label5;
OleDbConnection conn;
private void Page_Load(object sender, System.EventArgs e)
{
   PageSize = 10;
   string connstr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath(".")+"&#92;&#92;northwind.mdb;";
   conn = new OleDbConnection(connstr);
   rc1.Text=PageSize.ToString();
   CurrentPage=0;
   RecordCount=this.GetRecordCount();
   PageCount = (RecordCount%PageSize)>0?(RecordCount/PageSize)+1:(RecordCount/PageSize);
   pc1.Text=PageCount.ToString();
   ArrayList al=new ArrayList();
   for(int i=1;i<PageCount+1;i++)
   {
    al.Add(i);
   }
   if(!Page.IsPostBack)
   {
    jp1.DataSource=al;
    jp1.DataBind();
    mfbind();
   }
}
public int GetRecordCount()
  {
   conn.Open();
   OleDbCommand cmd=new OleDbCommand("select count(*) as cnt from mfblog",conn);
   int intCount=int.Parse(cmd.ExecuteScalar().ToString());
   cmd.Dispose();
   conn.Close();
   return intCount;
  }
private IList DataSource()
{
   int StartIndex;
   StartIndex = CurrentPage*PageSize;
   string strSql = "select * from mfblog";
   DataSet ds = new DataSet();
   OleDbDataAdapter da = new OleDbDataAdapter(strSql,conn);
   da.Fill(ds,StartIndex,PageSize,"mfblog");
   return ds.Tables["mfblog"].DefaultView;
  }
private void mfbind()
{
   dList.DataSource=(DataView)DataSource();
   dList.DataBind();
   np1.Enabled = true;
   pp1.Enabled = true;
   if(CurrentPage==(PageCount-1)) np1.Enabled = false;
   if(CurrentPage==0) pp1.Enabled = false;
   cp1.Text = (CurrentPage+1).ToString();
  }
public void Page_OnClick(Object sender,CommandEventArgs e)
  {
   CurrentPage =int.Parse(cp1.Text.Trim())-1;
   PageCount =int.Parse(pc1.Text.Trim());

   string cnstr = e.CommandName;
   switch(cnstr)
   {
    case "first":
     CurrentPage=0;
     break;
    case "next":
     if(CurrentPage<(PageCount-1)) CurrentPage++;
     break;
    case "prev":
     if(CurrentPage>0) CurrentPage--;
     break;
    case "last":
     CurrentPage=PageCount-1;
     break;
   }
   mfbind();
  }
  #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
}
  /// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
   this.fp1.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
   this.pp1.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
   this.np1.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
   this.lp1.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
   this.jp1.SelectedIndexChanged += new System.EventHandler(this.jp1_SelectedIndexChanged);
  this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void jp1_SelectedIndexChanged(object sender, System.EventArgs e)
{
   CurrentPage=int.Parse(jp1.SelectedItem.Text.Trim())-1;
   mfbind();
}
}
}

原文地址:https://www.cnblogs.com/googlegis/p/2979162.html