DataList自定义分页

      Asp.net里头,像DataList,Repeater,DataGrid,GridView,FormView包括Asp.net3.5中的ListView这几种服务器数据绑定控件,是在开发中经常需要用到的,撇开Asp.net3.5(因为3.5的版本有带分页的控件),DataGrid是1.1版本中很强大的控件,GridView则是2.0中有的,其实就是DataGrid的升级版,他们自身都带有分页功能,只需设置下属性,而DataList和Repeater则没有,下面就以DataList为例实现自定义分页.
      首先,先来看一个类: PagedDataSource 其成员如下:
名称 说明
Public property AllowCustomPaging 获取或设置一个值,指示是否在数据绑定控件中启用自定义分页。
Public propertyAllowPaging 获取或设置一个值,指示是否在数据绑定控件中启用分页。
Public propertyAllowServerPaging 获取或设置一个值,指示是否启用服务器端分页。
Public propertyCount 获取要从数据源使用的项数。
Public propertyCurrentPageIndex 获取或设置当前页的索引。
Public propertyDataSource 获取或设置数据源。
Public propertyDataSourceCount 获取数据源中的项数。
Public propertyFirstIndexInPage 获取页面中显示的首条记录的索引。
Public propertyIsCustomPagingEnabled 获取一个值,该值指示是否启用自定义分页。
Public propertyIsFirstPage 获取一个值,该值指示当前页是否是首页。
Public propertyIsLastPage 获取一个值,该值指示当前页是否是最后一页。
Public propertyIsPagingEnabled 获取一个值,该值指示是否启用分页。
Public propertyIsReadOnly 获取一个值,该值指示数据源是否是只读的。
Public propertyIsServerPagingEnabled 获取一个值,指示是否启用服务器端分页支持。
Public propertyIsSynchronized 获取一个值,该值指示是否同步对数据源的访问(线程安全)。
Public propertyPageCount 获取显示数据源中的所有项所需要的总页数。
Public propertyPageSize 获取或设置要在单页上显示的项数。
Public propertySyncRoot 获取可用于同步集合访问的对象。
Public propertyVirtualCount 获取或设置在使用自定义分页时数据源中的实际项数。
      有发现什么没?可以看到这些属性在GridView等有内置分页的控件中是类似的,所以这些有内置分页的控件也是通过该类实现分页的,那下来就好办了
前台Html代码:
共: < asp:Label  id = " lblPageTotal "  runat = " server " ></ asp:Label > 页   
< asp:LinkButton id = " lbFirst "  onclick = " PagerButton_Click "  runat = " server "  CommandArgument = " first " > 首 页 </ asp:LinkButton >  
< asp:LinkButton  id = " lbPrev "  onclick = " PagerButton_Click "  runat = " server "  CommandArgument = " prev " > 上一页 </ asp:LinkButton >  
< asp:LinkButton  id = " lbNext "  onclick = " PagerButton_Click "  runat = " server "  CommandArgument = " next " > 下一页 </ asp:LinkButton >  
< asp:LinkButton id = " lbLast "  onclick = " PagerButton_Click "  runat = " server "  CommandArgument = " last " > 尾 页 </ asp:LinkButton >    
当前:第
< asp:Label  id = " lblCurrentPage "  runat = " server " ></ asp:Label > 页   
跳转至:第
< asp:DropDownList ID = " ddlPage "  runat = " server "  AutoPostBack = " true "  OnSelectedIndexChanged = " ddlPage_SelectedIndexChanged " ></ asp:DropDownList >
后台.cs代码:
ContractedBlock.gif ExpandedBlockStart.gif Code
protected void Page_Load(object sender, EventArgs e)
{
   
if (!IsPostBack)
   {
      ViewState[
"PageIndex"= "0"//第一次生成,页码索引置0
      this.BindGrid();

      ddlPage.Items.Clear();
      
for (int i = 0; i < Int32.Parse(lblPageTotal.Text); i++)
      {
         
string itemText = (i + 1).ToString();
         ddlPage.Items.Add(
new ListItem(itemText, itemText));
      }
   }
}
绑定数据源的方法
ContractedBlock.gif ExpandedBlockStart.gif Code
private void BindGrid()
{
    DataTable table 
= this.CreateTable();  //CreateTable这个方法就是获取数据源的了,这里不贴了
    if (table.Rows.Count > 0)
    {
        
//对PagedDataSource 对象的相关属性赋值
         objPDS = new PagedDataSource();
        objPDS.DataSource 
= table.DefaultView;
        objPDS.AllowPaging 
= true;
        objPDS.PageSize 
= this.ListSize;  //ListSize属性用于设置每页显示多少条,可以直接指定
        objPDS.CurrentPageIndex = int.Parse(ViewState["PageIndex"].ToString());

        lbFirst.Enabled 
= true;
        lbPrev.Enabled 
= true;
        lbNext.Enabled 
= true;
        lbLast.Enabled 
= true;
        
//判断当前页是否首页
         if (objPDS.IsFirstPage)
        {
            lbFirst.Enabled 
= false;
            lbPrev.Enabled 
= false;
        }
        
//判断当前页是否尾页
         if (objPDS.IsLastPage)
        {
            lbNext.Enabled 
= false;
            lbLast.Enabled 
= false;
        }
        
this.dl_LinkList.DataSource = objPDS;
        
this.dl_LinkList.DataBind();

        lblPageTotal.Text 
= objPDS.PageCount.ToString();
        lblCurrentPage.Text 
= (objPDS.CurrentPageIndex + 1).ToString();
     }
     
else
     {
        
this.dl_LinkList.DataSource = table;
        
this.dl_LinkList.DataBind();
     }
}
触发分页按钮的事件
ContractedBlock.gif ExpandedBlockStart.gif Code
protected void PagerButton_Click(object sender, EventArgs e)
{
   
string arg = ((LinkButton)sender).CommandArgument.ToString().ToLower();
   
int pageIndex = int.Parse(ViewState["PageIndex"].ToString());
   
switch (arg)
   {
       
case "first":
            pageIndex 
= 0;
            
break;
       
case "last":
            
int itemCount = this.GetDataSource().Rows.Count;
            
int totalPage = itemCount % this.ListSize == 0 ? itemCount / ListSize : itemCount / (ListSize + 1);
            pageIndex 
= totalPage - 1;
            
break;
       
case "prev":
            pageIndex 
= pageIndex - 1;
            
break;
       
case "next":
            pageIndex 
= pageIndex + 1;
            
break;
    }
    ViewState[
"PageIndex"= pageIndex;
    
this.BindGrid();
    ddlPage.SelectedIndex 
= pageIndex;
}
触发下拉框的事件
ContractedBlock.gif ExpandedBlockStart.gif Code
protected void ddlPage_SelectedIndexChanged(object sender, EventArgs e)
{
   ViewState[
"PageIndex"= Int32.Parse(ddlPage.SelectedValue)-1;
   
this.BindGrid();
   ddlPage.SelectedIndex 
= Int32.Parse(ViewState["PageIndex"].ToString());
}
代码很简单,就不解释了...要注意的是,下拉框要在页面载入的时候初始化,不然触发不到下拉框的事件.

转载于:https://www.cnblogs.com/py891021/archive/2009/08/19/1549559.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值