(对新秀问题提前道歉)
我有一个简单的GridView,其分页实现如下:
<asp:GridView ID="ResultsGrid" runat="server" EnableViewState="true"
AutoGenerateColumns="true" OnDataBound="ResultsGrid_DataBound"
OnPreRender="ResultsGrid_PreRender" AllowPaging="true" PageSize="25">
<PagerTemplate>
<asp:DropDownList runat="server" ID="PageSizeDDL" AutoPostBack="true" OnSelectedIndexChanged="PageSizeDDL_SelectedIndexChanged">
<asp:ListItem Text="10" Value="10" />
<asp:ListItem Text="25" Value="25" />
<asp:ListItem Text="50" Value="50" />
<asp:ListItem Text="100" Value="100" />
<asp:ListItem Text="Show all" Value="All" />
</asp:DropDownList>
<asp:LinkButton runat="server" ID="PagerPrevious" Text="<" CommandName="Page" CommandArgument="Previous" OnCommand="Pager_Command" />
<asp:Repeater runat="server" ID="PagerNumbers">
<ItemTemplate>
<asp:LinkButton runat="server" ID="PagerPageButton" Enabled='<%# Eval("Enabled") %>' Text='<%# Eval("Text") %>'
CommandName="Page" CommandArgument='<%# Convert.ToInt32(Eval("Text"))-1 %>'
OnCommand="Pager_Command" />
</ItemTemplate>
</asp:Repeater>
<asp:LinkButton runat="server" ID="PagerNext" Text=">" CommandName="Page" CommandArgument="Next" OnCommand="Pager_Command" />
</PagerTemplate>
</asp:GridView>
所选页面大小(每页行数),所选页面索引和总行数(从db检索)存储在viewstate中。
事件的顺序如下:
问题是当我点击页码或上一个/下一个按钮时,我点击的页面控件的Command事件根本不会触发。它在回发时转到Page_Load,然后直接转到页面呈现,并且网格在单击之前不显示任何行或第一行。那么,如果我再次单击任何页面链接按钮,命令会触发此时间,从上一次尝试中获取正确的页面索引,并且加载了我尝试导航到的页面。
看起来我在某些时候搞砸了事件的顺序,但现在我找不到究竟是什么导致了这个问题。任何帮助将不胜感激!
编辑:找到它 - 我在数据绑定之前和之后设置了两次ResultsGrid.PageIndex值。第二次是被中断的事件顺序 - 在删除它之后,一切都像魅力一样。