DataList与PagedDataSource类

 

 导言


在建立ASP.NET Web应用程序,最常见的任务是显示数据。ASP.NET提供了一个富饶的数据网络控制,使显示数据一件轻而易举的,但最强大的数据网络控制-D ataGrid中-实行某些限制的灵活性奠定了数据在网页上。 最近我发现自己需要一个更灵活的布局比DataGrid中的刚性列/行的方向,所以我决定去与Repeater控件,所以我可以很容易地定制标记排放。

 

Repeater控件是非常适合象这样的情况,如果你需要一个精细程度的控制权发出的HTML中,以布局的内容以一种独特的或精确的方式。一个缺点的直放站是,它没有内置分页功能,这项功能提供的DataGrid 。自从我将需要显示可能数以百计的记录目录中的,重要的是,我提供的传呼支持直放站。

幸运的是在一类的。 NET Framework的目的是提供页面访问数据源。 这类, PagedDataSource类,可用于任何一方的数据转发器或模仿传呼功能的DataGrid 。使用PagedDataSource级您就可以写更多的代码会比你使用的数据,但数量和复杂性的代码您有写是相当低的。在本文中我们会研究这个阶级,见一个具体的例子如何执行分页的Repeater控制。

寻呼与PagedDataSource
PagedDataSource类,发现在System.Web.UI.WebControls命名,概括了所需的性能,使寻呼的控制。为了实现分页控制在与PagedDataSource类,您需要执行下列步骤:

  1. 获取的数据,你想通过网页。 .这可以是一个数组,一个DataSet ,一个DataReader ,或任何其它物体上,可以分配到一个数据Web控件的DataSource
  2. 创建PagedDataSource例如,并指定数据页到PagedDataSourceDataSource
  3. 设置PagedDataSource类的寻呼性能,如设置AllowPaging为True ,并设置PageSize (以说明有多少记录每页显示)。
  4. 指派PagedDataSource例如数据Web控件的DataSource和调用数据Web控件的DataBind()

Example: Creating a Pageable Repeater 例如:创建一个分页直放站
Repeater.要研究如何使用PagedDataSource类提供分页支持在一个转发器,让我们创造一个分页直放站。 首先,我们需要建立的HTML内容,其中包括Repeater控制;注意到,包含的HTML不仅是一个中继器,而且传呼导航按钮和一个标签标明页码。 (请注意,直放站的ItemTemplate很简单,在此范例和相同的输出有可能与一个DataGrid ,但拥有的概念-你可以改变转发的标记,以便更丰富的输出,将不可能与D ataGrid中。 )

  1. <table width="100%" border="0"> 
  2. <tr> 
  3. <td>  Repeater control with Paging functionality</td> 
  4. </tr> 
  5. <tr> 
  6. <td>  <asp:label id="lblCurrentPage" runat="server"></asp:label></td> 
  7. </tr> 
  8. <tr> 
  9. <td>  <asp:button id="cmdPrev" runat="server" text=" << "></asp:button> 
  10. <asp:button id="cmdNext" runat="server" text=" >> "></asp:button></td> 
  11. </tr> 
  12. </table> 
  13. <table border="1"> 
  14. <asp:repeater id="repeaterItems" runat="server"> 
  15. <itemtemplate> 
  16. <tr> 
  17. <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemName") %></b></td> 
  18. <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemDescription") %></b></td> 
  19. <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemPrice") %></b></td> 
  20. <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemInStock") %></b></td> 
  21. </tr> 
  22. </itemtemplate> 
  23. </asp:repeater> 
  24. </table> 

在HTML的分页器可简单或参与你想要的。 .该代码,但很简单。第一步是写代码,将尽一切工作的正确显示网页的数据中继。这是通过一读的数据将通过分页。对于这个例子中,我只是创造了一个XML文件( Items.xml )载有一些样本数据;这个XML文件可在代码下载在本月底的文章。

  1. // Read sample item info from XML document into a DataSet 
  2. DataSet Items = new DataSet(); 
  3. Items.ReadXml(MapPath("Items.xml")); 

现在,我们已经将数据通过网页,我们需要建立一个PagedDataSource实例,并指定其DataSource和其他属性有密切关系。

  1. // Populate the repeater control with the Items DataSet 
  2. PagedDataSource objPds = new PagedDataSource(); 
  3. objPds.DataSource = Items.Tables[0].DefaultView; 
  4. // Indicate that the data should be paged 
  5. objPds.AllowPaging = true
  6. // Set the number of items you wish to display per page 
  7. objPds.PageSize = 3

PagedDataSource也有CurrentPageIndex ,这表明什么网页要显示的数据。下面的代码显示指定这个属性。 请注意, CurrentPageIndex分配的价值页面级的财产要求CurrentPage 。 我们会讨论这个页面级的财产很快。

  1. // Set the PagedDataSource's current page 
  2. objPds.CurrentPageIndex = CurrentPage - 1; 

最后,我们需要启用/禁用的导航按钮而如果我们在第一/最后一页,以及更新网页标签对照说明什么网页目前正在观看。 我们可以很容易地确定如果我们在第一/最后一页使用PagedDataSourceIsFirstPageIsLastPage性能。

  1. lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of " 
  2. + objPds.PageCount.ToString(); 
  3. // Disable Prev or Next buttons if necessary 
  4. cmdPrev.Enabled = !objPds.IsFirstPage; 
  5. cmdNext.Enabled = !objPds.IsLastPage; 

最后,我们显示正确的网页数据约束力的PagedDataSource对象的中继器。

  1. repeaterItems.DataSource = objPds; 
  2. repeaterItems.DataBind(); 

 

 审查CurrentPage页面级财产
回到我们先前的代码示例,我们指派了PagedDataSource对象的CurrentPageIndex财产的网页级别的财产要求CurrentPage 。为了记住页的数据显示全国postbacks ,重要的是,该网页索引保持在视图状态。 This page-level 此网页级别的财产基本上包装纸的复杂性,读/写的视图状态,提供了一个便捷的途径获取和设置当前页的索引。 Here is the CurrentPage property:这是CurrentPage财产:

  1. public int CurrentPage 
  2. get 
  3. // look for current page in ViewState  
  4. object o = this.ViewState["_CurrentPage"]; 
  5. if (o == null
  6. return 0; // default page index of 0  
  7. else 
  8. return (int) o; 
  9. set 
  10. this.ViewState["_CurrentPage"] = value; 

 网页之间移动数据
从一个网页到另一个数据,用户访问该网页可以点击下一个或上一个按钮。 这些按钮,点击后就会造成回,并运行服务器端代码,更新CurrentPage财产和rebinds的数据中继。

  1. private void cmdPrev_Click(object sender, System.EventArgs e) 
  2. // Set viewstate variable to the previous page 
  3. CurrentPage -= 1; 
  4. // Reload control 
  5. ItemsGet(); 
  6. private void cmdNext_Click(object sender, System.EventArgs e) 
  7. // Set viewstate variable to the next page 
  8. CurrentPage += 1; 
  9. // Reload control 
  10. ItemsGet(); 

ItemsGet()页面级的方法(其代码前,我们审查) ,其中包含的代码创建PagedDataSource对象和约束的中继器。

 

Conclusion 结论
正如你可以看到,增加了寻呼功能, Repeater控制是相当简单的感谢PagedDataSource 。您现在应该可以创造一个传呼Repeater控件,将符合您的需求;的经验教训在这里也适用于添加分页支持一个DataList 。审议的能力,网页,转发或DataList控制将大大提高这些有用的数据网络控制,并希望你会发现自己使用这些功能的控制更加频繁。

Happy Programming!快乐编程!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值