如何在 ASP.NET 中使用带有 Repeater 控件的分页?
Posted
技术标签:
【中文标题】如何在 ASP.NET 中使用带有 Repeater 控件的分页?【英文标题】:How to use paging with Repeater control in ASP.NET? 【发布时间】:2014-05-19 05:43:24 【问题描述】:<asp:Repeater ID="RepCourse" runat="server">
<ItemTemplate>
<div style="width:400px"></div>
<div class="course" style="float: left; margin-left: 100px; margin-top: 100px">
<div class="image">
<asp:Image ID="imgteacher" runat="server" Height="150" Width="248" ImageUrl='<%# "ShowImage.ashx?id="+ DataBinder.Eval(Container.DataItem, "CourseID") %>'/>
</div>
<div style="margin-left: 3px; width: 250px">
<div class="name">
<a href="#"><asp:Label runat="server" ID="lblname" Text='<%#Eval("CourseName") %>'></asp:Label></a>
</div>
<div style="height: 13px"></div>
<div id="teacher">
<a href="#"><%#Eval("UserName") %> </a>
</div>
</div>
<div style="height: 4px"></div>
<div class="date">
<div id="datebegin">
<asp:Label ID="lbldatebegin" runat="server" Text='<%#Eval("BeginDate") %>'></asp:Label>
</div>
<div id="dateend">
<asp:Label ID="lbldateend" runat="server" Text='<%#Eval("ClosingDate") %>'></asp:Label>
</div>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
在我的项目中 Repeater Control
工作正常。现在我需要分页来替换这些数据。但我没有这方面的任何信息。可能有人给我关于这个问题的建议。
如下图所示。
【问题讨论】:
也许这会对你有所帮助:aspsnippets.com/Articles/… 【参考方案1】:Repeater 控件没有内置分页,但根据this 文章,您可以通过为页面创建另一个Repeater 控件并使用PagedDataSource
作为其源来实现Repeater 控件中的分页。
首先,将其添加到您的标记中:
<div style="overflow: hidden;">
<asp:Repeater ID="rptPaging" runat="server" OnItemCommand="rptPaging_ItemCommand">
<ItemTemplate>
<asp:LinkButton ID="btnPage"
style="padding:8px;margin:2px;background:#ffa100;border:solid 1px #666;font:8pt tahoma;"
CommandName="Page" CommandArgument="<%# Container.DataItem %>"
runat="server" ForeColor="White" Font-Bold="True">
<%# Container.DataItem %>
</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
</div>
接下来,在你的代码后面添加以下属性:
//This property will contain the current page number
public int PageNumber
get
if (ViewState["PageNumber"] != null)
return Convert.ToInt32(ViewState["PageNumber"]);
else
return 0;
set ViewState["PageNumber"] = value;
最后添加以下方法:
protected void Page_Load(object sender, EventArgs e)
BindRepeater();
private void BindRepeater()
//Do your database connection stuff and get your data
SqlConnection cn = new SqlConnection(yourConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
SqlDataAdapter ad = new SqlDataAdapter(cmd);
cmd.CommandText = "Select * from YourTable";
//save the result in data table
DataTable dt = new DataTable();
ad.SelectCommand = cmd;
ad.Fill(dt);
//Create the PagedDataSource that will be used in paging
PagedDataSource pgitems = new PagedDataSource();
pgitems.DataSource = dt.DefaultView;
pgitems.AllowPaging = true;
//Control page size from here
pgitems.PageSize = 4;
pgitems.CurrentPageIndex = PageNumber;
if (pgitems.PageCount > 1)
rptPaging.Visible = true;
ArrayList pages = new ArrayList();
for (int i = 0; i <= pgitems.PageCount - 1; i++)
pages.Add((i + 1).ToString());
rptPaging.DataSource = pages;
rptPaging.DataBind();
else
rptPaging.Visible = false;
//Finally, set the datasource of the repeater
RepCourse.DataSource = pgitems;
RepCourse.DataBind();
//This method will fire when clicking on the page no link from the pager repeater
protected void rptPaging_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e)
PageNumber = Convert.ToInt32(e.CommandArgument) - 1;
BindRepeater();
请试一试,如果您遇到任何问题,请告诉我。
编辑:替代解决方案
另一个优秀的解决方案可以找到Here,这个解决方案包括页面的导航按钮。您需要从该链接下载文件以查看功能分页,只需将 DataList 控件替换为您的 Repeater 控件即可。
希望这会有所帮助。
【讨论】:
以上是关于如何在 ASP.NET 中使用带有 Repeater 控件的分页?的主要内容,如果未能解决你的问题,请参考以下文章
如何在带有 ADO.NET 的 ASP.NET Core MVC 中使用 jQuery Ajax 自动完成
如何使用带有 OpenId Connect 的刷新令牌在 asp.net 核心中处理过期的访问令牌
如何使用 asp.net core api 在其标头中授权带有 x-auth-token 的请求?
如何在 ASP.NET CORE 3.0 中配置路由以使用带有 [FromQuery] 参数的重载 [HttpGet] 方法?