GridView - PagerTemplate中的页面导航仅在第二次尝试时起作用

时间:2016-08-05 07:55:02

标签: c# asp.net events gridview paging

(对新秀问题提前道歉)

我有一个简单的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中。

事件的顺序如下:

  1. Pager_Command - 获取要导航到的页面索引,将ResultsGrid.PageIndex设置为新值;
  2. 从数据库获取下一页的数据;
  3. 在viewstate中存储新的页面大小,页面索引和总行数;
  4. 将新数据绑定到网格中;
  5. 更新页面链接按钮(如果我们已经在第一页/最后一页等,则禁用上一个/下一个按钮。)。
  6. 问题是当我点击页码或上一个/下一个按钮时,我点击的页面控件的Command事件根本不会触发。它在回发时转到Page_Load,然后直接转到页面呈现,并且网格在单击之前不显示任何行或第一行。那么,如果我再次单击任何页面链接按钮,命令会触发此时间,从上一次尝试中获取正确的页面索引,并且加载了我尝试导航到的页面。

    看起来我在某些时候搞砸了事件的顺序,但现在我找不到究竟是什么导致了这个问题。任何帮助将不胜感激!

    编辑:找到它 - 我在数据绑定之前和之后设置了两次ResultsGrid.PageIndex值。第二次是被中断的事件顺序 - 在删除它之后,一切都像魅力一样。

0 个答案:

没有答案