导言
在建立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
类,您需要执行下列步骤:
- 获取的数据,你想通过网页。 .这可以是一个数组,一个DataSet ,一个DataReader ,或任何其它物体上,可以分配到一个数据Web控件的
DataSource
。 - 创建
PagedDataSource
例如,并指定数据页到PagedDataSource
的DataSource
。 - 设置
PagedDataSource
类的寻呼性能,如设置AllowPaging
为True ,并设置PageSize
(以说明有多少记录每页显示)。 - 指派
PagedDataSource
例如数据Web控件的DataSource
和调用数据Web控件的DataBind()
Example: Creating a Pageable Repeater 例如:创建一个分页直放站
Repeater.要研究如何使用PagedDataSource
类提供分页支持在一个转发器,让我们创造一个分页直放站。 首先,我们需要建立的HTML内容,其中包括Repeater控制;注意到,包含的HTML不仅是一个中继器,而且传呼导航按钮和一个标签标明页码。 (请注意,直放站的ItemTemplate
很简单,在此范例和相同的输出有可能与一个DataGrid ,但拥有的概念-你可以改变转发的标记,以便更丰富的输出,将不可能与D ataGrid中。 )
- <table width="100%" border="0">
- <tr>
- <td> Repeater control with Paging functionality</td>
- </tr>
- <tr>
- <td> <asp:label id="lblCurrentPage" runat="server"></asp:label></td>
- </tr>
- <tr>
- <td> <asp:button id="cmdPrev" runat="server" text=" << "></asp:button>
- <asp:button id="cmdNext" runat="server" text=" >> "></asp:button></td>
- </tr>
- </table>
- <table border="1">
- <asp:repeater id="repeaterItems" runat="server">
- <itemtemplate>
- <tr>
- <td> <b><%# DataBinder.Eval(Container.DataItem, "ItemName") %></b></td>
- <td> <b><%# DataBinder.Eval(Container.DataItem, "ItemDescription") %></b></td>
- <td> <b><%# DataBinder.Eval(Container.DataItem, "ItemPrice") %></b></td>
- <td> <b><%# DataBinder.Eval(Container.DataItem, "ItemInStock") %></b></td>
- </tr>
- </itemtemplate>
- </asp:repeater>
- </table>
在HTML的分页器可简单或参与你想要的。 .该代码,但很简单。第一步是写代码,将尽一切工作的正确显示网页的数据中继。这是通过一读的数据将通过分页。对于这个例子中,我只是创造了一个XML文件( Items.xml
)载有一些样本数据;这个XML文件可在代码下载在本月底的文章。
- // Read sample item info from XML document into a DataSet
- DataSet Items = new DataSet();
- Items.ReadXml(MapPath("Items.xml"));
现在,我们已经将数据通过网页,我们需要建立一个PagedDataSource
实例,并指定其DataSource
和其他属性有密切关系。
- // Populate the repeater control with the Items DataSet
- PagedDataSource objPds = new PagedDataSource();
- objPds.DataSource = Items.Tables[0].DefaultView;
- // Indicate that the data should be paged
- objPds.AllowPaging = true;
- // Set the number of items you wish to display per page
- objPds.PageSize = 3;
该PagedDataSource
也有CurrentPageIndex
,这表明什么网页要显示的数据。下面的代码显示指定这个属性。 请注意, CurrentPageIndex
分配的价值页面级的财产要求CurrentPage
。 我们会讨论这个页面级的财产很快。
- // Set the PagedDataSource's current page
- objPds.CurrentPageIndex = CurrentPage - 1;
最后,我们需要启用/禁用的导航按钮而如果我们在第一/最后一页,以及更新网页标签对照说明什么网页目前正在观看。 我们可以很容易地确定如果我们在第一/最后一页使用PagedDataSource
的IsFirstPage
和IsLastPage
性能。
- lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of "
- + objPds.PageCount.ToString();
- // Disable Prev or Next buttons if necessary
- cmdPrev.Enabled = !objPds.IsFirstPage;
- cmdNext.Enabled = !objPds.IsLastPage;
最后,我们显示正确的网页数据约束力的PagedDataSource
对象的中继器。
- repeaterItems.DataSource = objPds;
- repeaterItems.DataBind();
审查CurrentPage
页面级财产
回到我们先前的代码示例,我们指派了PagedDataSource
对象的CurrentPageIndex
财产的网页级别的财产要求CurrentPage
。为了记住页的数据显示全国postbacks ,重要的是,该网页索引保持在视图状态。 This page-level 此网页级别的财产基本上包装纸的复杂性,读/写的视图状态,提供了一个便捷的途径获取和设置当前页的索引。 Here is the CurrentPage
property:这是CurrentPage
财产:
- public int CurrentPage
- {
- get
- {
- // look for current page in ViewState
- object o = this.ViewState["_CurrentPage"];
- if (o == null)
- return 0; // default page index of 0
- else
- return (int) o;
- }
- set
- {
- this.ViewState["_CurrentPage"] = value;
- }
- }
网页之间移动数据
从一个网页到另一个数据,用户访问该网页可以点击下一个或上一个按钮。 这些按钮,点击后就会造成回,并运行服务器端代码,更新CurrentPage
财产和rebinds的数据中继。
- private void cmdPrev_Click(object sender, System.EventArgs e)
- {
- // Set viewstate variable to the previous page
- CurrentPage -= 1;
- // Reload control
- ItemsGet();
- }
- private void cmdNext_Click(object sender, System.EventArgs e)
- {
- // Set viewstate variable to the next page
- CurrentPage += 1;
- // Reload control
- ItemsGet();
- }
ItemsGet()页面级的方法(其代码前,我们审查) ,其中包含的代码创建PagedDataSource
对象和约束的中继器。
Conclusion 结论
正如你可以看到,增加了寻呼功能, Repeater控制是相当简单的感谢PagedDataSource
。您现在应该可以创造一个传呼Repeater控件,将符合您的需求;的经验教训在这里也适用于添加分页支持一个DataList 。审议的能力,网页,转发或DataList控制将大大提高这些有用的数据网络控制,并希望你会发现自己使用这些功能的控制更加频繁。
Happy Programming!快乐编程!