从 MSDN 页面获取PagerTemplate
of the GridView
控制(强调我的):
通常,按钮控制添加到寻呼机模板中以执行寻呼操作。当单击 CommandName 属性设置为“Page”的按钮控件时,GridView 控件将执行分页操作。按钮的命令参数属性决定要执行的分页操作的类型。
- “下一页”:导航到下一页。
- “上一页”:导航到上一页。
- “第一”:导航到第一页。
- “最后”:导航到最后一页。
-
整数值:导航至指定页码。
Source: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.pagertemplate(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.pagertemplate(v=vs.110).aspx
由于其静态特性,对于下一个/上一个/第一个/最后一个按钮来说,这些东西非常简单。
<PagerTemplate>
<table>
<tr>
<td>
<asp:Button CommandName="Page" CommandArgument="First" Enabled="<%# Model.PageContext.HasPrevious %>" Text="First" runat="server" />
</td>
<td>
<asp:Button CommandName="Page" CommandArgument="Prev" Enabled="<%# Model.PageContext.HasPrevious %>" Text="Previous" runat="server" />
</td>
<td>
<asp:Button CommandName="Page" CommandArgument="Next" Enabled="<%# Model.PageContext.HasNext %>" Text="Next" runat="server" />
</td>
<td>
<asp:Button CommandName="Page" CommandArgument="Last" Enabled="<%# Model.PageContext.HasNext %>" Text="Last" runat="server" />
</td>
</tr>
</table>
</PagerTemplate>
另一方面,CommandArgument
对于可以导航到的每个页面,数字按钮必须是动态的且唯一的。我想我需要一个for
-循环或转发器控件以在用户显示器上获取正确数量的页面链接。
我似乎没有尝试过just工作。我的 for 循环代码甚至无法编译。
<% for (int pageIndex = 0; pageIndex < Model.PageContext.PageCount; pageIndex++) { %>
<asp:LinkButton CommandName="Page" CommandArgument="<%= pageIndex %>" Text="<%= pageIndex + 1 %>" runat="server"/>
<% } %>
我的替代方法使用Repeater
控制和does编译,但是Repeater
控件本身处理ItemCommand
对于每个按钮,防止“页面”ItemCommand
事件从冒泡到GridView
.
<asp:Repeater ItemType="System.Int32" SelectMethod="GetPages" runat="server">
<ItemTemplate>
<asp:LinkButton CommandName="Page" CommandArgument="<%# Item %>" Text="<%# Item + 1 %>" runat="server" />
</ItemTemplate>
</asp:Repeater>
每个按钮都会引发正确的事件,但这些事件永远不会到达GridView
因为它们是由较低级别处理的Repeater
控制。我必须附加一个监听的事件处理程序RepeaterCommandEventArgs
然后设置新的页面索引GridView
myself.
*深呼吸*
我可以添加数字页面按钮吗无需自己连接事件?
根据上面的代码,我试图实现的结果: