这两个类比较有用,先摘下来存一下

封装数据绑定控件(如 DataGrid、GridView、DetailsView 和 FormView)的与分页相关的属性,以允许该控件执行分页操作。无法继承此类。

名称 说明
  AllowCustomPaging 获取或设置一个值,指示是否在数据绑定控件中启用自定义分页。
  AllowPaging 获取或设置一个值,指示是否在数据绑定控件中启用分页。
  AllowServerPaging 获取或设置一个值,指示是否启用服务器端分页。
  Count 获取要从数据源使用的项数。
  CurrentPageIndex 获取或设置当前页的索引。
  DataSource 获取或设置数据源。
  DataSourceCount 获取数据源中的项数。
  FirstIndexInPage 获取页面中显示的首条记录的索引。
  IsCustomPagingEnabled 获取一个值,该值指示是否启用自定义分页。
  IsFirstPage 获取一个值,该值指示当前页是否是首页。
  IsLastPage 获取一个值,该值指示当前页是否是最后一页。
  IsPagingEnabled 获取一个值,该值指示是否启用分页。
  IsReadOnly 获取一个值,该值指示数据源是否是只读的。
  IsServerPagingEnabled 获取一个值,指示是否启用服务器端分页支持。
  IsSynchronized 获取一个值,该值指示是否同步对数据源的访问(线程安全)。
  PageCount 获取显示数据源中的所有项所需要的总页数。
  PageSize 获取或设置要在单页上显示的项数。
  SyncRoot 获取可用于同步集合访问的对象。
  VirtualCount 获取或设置在使用自定义分页时数据源中的实际项数。


 private PagedDataSource pds()
    
{
        
string connstring = ConfigurationManager.ConnectionStrings["Pubs"].ConnectionString;
        
//声明一个字符串,后面随时可以用
        SqlConnection con = new SqlConnection(connstring);
        
//初始化连接
        SqlDataAdapter sda = new SqlDataAdapter("select * from authors", con);
        
//初始化一个SqlDataAdapter,并给出查询语句
        DataSet ds = new DataSet();
        
//初始化一个DataSet
        sda.Fill(ds, "name");
        
//将上面查询到的数据填充到name表中
        SqlDataAdapter sda2 = new SqlDataAdapter("select * from titleauthor", con);
        
//同上
        sda2.Fill(ds, "title");
        
//同上
        ds.Relations.Add("myrela", ds.Tables["name"].Columns["au_id"], ds.Tables["title"].Columns["au_id"]);
        
//为上面建立的两个表创建一个关系,指明父列和子列的名称并为他们的关系命名,前面将会用到

        PagedDataSource pds 
= new PagedDataSource();
        
//初始化一个PagedDataSource,允许控件分页
        pds.DataSource = ds.Tables["name"].DefaultView;
        
//将上面的ds转换成标准数据视图
        pds.AllowPaging = true;
        
//允许分页
        pds.PageSize = 5;
        
//每页大小为5  
        pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);
        
//设置当前页
        return pds;
        
//将处理完毕的pds对象发出去
    }

    
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    
{
        
if (e.Item.ItemType == ListItemType.Footer)
        
{//判断当前项是页脚模板
            int n = pds().PageCount;//将分页总数赋给变量n
            int i = pds().CurrentPageIndex;//将当前分页码赋给i

            Label lblpc 
= (Label)e.Item.FindControl("lblpc");
            lblpc.Text 
= n.ToString();
            
//找到lblpc这个Label,将总页码赋给他
            Label lblp = (Label)e.Item.FindControl("lblp");            
            lblp.Text 
= Convert.ToString(pds().CurrentPageIndex + 1);            
            
//找到lblp这个Label,将当前页码赋给他,但是注意,因为页码从0开始,这里要直观的话就得加1
            HyperLink hlfir = (HyperLink)e.Item.FindControl("hlfir");
            hlfir.NavigateUrl 
= "?page=0";
            HyperLink hlla 
= (HyperLink)e.Item.FindControl("hlla");
            hlla.NavigateUrl 
= "?page=" + Convert.ToInt32(n - 1);
            
//找到表示最前页和末页的Label,为他们的NavigateUrl属性赋为第0页和最大页码减1
            HyperLink hlp = (HyperLink)e.Item.FindControl("hlp");
            HyperLink hln 
= (HyperLink)e.Item.FindControl("hln");
            
//找到表示上页和下页这两个控件
            if (i <= 0)
            
{//如果当前页已经是第0页
                hlp.Enabled = false;
                hlfir.Enabled 
= false;
                hln.Enabled 
= true;
            }

            
else
            
{
                hlp.NavigateUrl 
= "?page=" + Convert.ToInt32(i - 1);
            }

            
if (i > n-2 )
            
{//如果当前项已经是最末页
                hln.Enabled = false;
                hlla.Enabled 
= false;
                hlp.Enabled 
= true;
            }

            
else
            
{
                hln.NavigateUrl 
= "?page=" + Convert.ToInt32(i + 1);
            }

        }

    }