2010-11-16 85 views

回答

0

你为什么不只是改变

for (int i = 0; i < pds.PageCount; i++) 

for (int i = 0; i < pds.PageCount && i < 4; i++) 
+0

嗨,好吧,您的建议是限制大页面数量,但如何generat下一个集团5 6 7 8 thx为您的快速回复 – markov00 2010-11-16 17:54:25

+0

除非这是ASP.NET,否则您可能应该查看自定义分页;虽然没有经验。 – Stu 2010-11-16 18:09:53

+0

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.pageddatasource.iscustompagingenabled.aspx – Stu 2010-11-16 18:11:13

0

这是C#2.0的方式,你可能会考虑使用Enumerable.Range而不是为循环

PagedDataSource = new PagedDataSource(); 
PagedDataSource.DataSource = _yourData; 
PagedDataSource.AllowPaging = true; 
PagedDataSource.PageSize = 20; 
PagedDataSource.CurrentPageIndex = PageNumber; // get from session, viewstate, ... 

if (PagedDataSource.PageCount > 1) 
{ 
    rptDataPager.Visible = true; 
    rptDataPager.DataSource = GetPageRange(10); // try with 4 as you requested 
    rptDataPager.DataBind(); 
} 
else 
    rptDataPager.Visible = false; 

yourRepeater.DataSource = PagedDataSource; 
yourRepeater.DataBind(); 

// and then the method 
private ArrayList GetPageRange(int pagesToDisplay) 
{ 
    ArrayList pages = new ArrayList(); 
    if (PagedDataSource.PageCount <= pagesToDisplay) 
    { 
     for (int i = 0; i < PagedDataSource.PageCount; i++) 
      pages.Add((i + 1).ToString()); 
    } 
    else 
    { 
     if (PagedDataSource.CurrentPageIndex - (pagesToDisplay/2) <= 0) 
     { 
      for (int i = 0; i < pagesToDisplay; i++) 
       pages.Add((i + 1).ToString()); 
     } 
     else if (PagedDataSource.CurrentPageIndex + (pagesToDisplay/2) >= PagedDataSource.PageCount) 
     { 
      for (int i = PagedDataSource.PageCount - pagesToDisplay; i < PagedDataSource.PageCount; i++) 
       pages.Add((i + 1).ToString()); 
     } 
     else 
     { 
      for (int i = PagedDataSource.CurrentPageIndex - (pagesToDisplay/2); i < PagedDataSource.CurrentPageIndex + (pagesToDisplay/2); i++) 
       pages.Add((i + 1).ToString()); 
     } 
    } 
    return pages; 
}