UpdatePanel中的GridView分页

本文关键字:分页 GridView 中的 UpdatePanel | 更新日期: 2023-09-27 17:50:02

我有一个UpdatePanel和GridView在它。我有一个分页问题:当我按下Next按钮时,没有调用grdUsers_PageIndexChanging(),所以页面保持1,如果以前我在ddlPageSize中更改了选择,现在它会回到初始选择。此外,如果我在第一页上,上一页按钮没有被禁用,按下它会导致超出范围错误。我做错了什么?谢谢。

<asp:UpdatePanel ID="upnlUsers" runat="server" ChildrenAsTriggers="true" UpdateMode="Always" >
    <ContentTemplate>
        <div style="height:400px; width:1500px; overflow:auto;">
        <asp:GridView ID="grdUsers" runat="server" AllowPaging="True" ShowHeader="false" ShowFooter="true" 
            AutoGenerateColumns="false" CssClass="largegridview largegridview_td" 
            Width="1480px" Height="100%" PageSize="100" DataKeyNames="ID" EnableSortingAndPagingCallbacks="false" 
                onpageindexchanging="grdUsers_PageIndexChanging" 
                onrowdatabound="grdUsers_RowDataBound">
                <AlternatingRowStyle CssClass="alternatingrowstyle" />
                <Columns>
                     <asp:TemplateField HeaderText="User Name" SortExpression="Name">
                        <ItemTemplate>
                            <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Last Name" SortExpression="LastName">
                        <ItemTemplate>
                            <asp:Label ID="lblLastName" runat="server" Text='<%# Eval("LastName") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>                        
                    <asp:TemplateField HeaderText="First Name" SortExpression="FirstName">
                        <ItemTemplate>
                            <asp:Label ID="lblFirstName" runat="server" Text='<%# Eval("FirstName") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Email" SortExpression="Email">
                        <ItemTemplate>
                            <asp:Label ID="lblEmail" runat="server" Text='<%# Eval("Email") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>                        
                </Columns>
                <PagerStyle CssClass="pagerstyle" />
                <PagerTemplate>
                    <asp:Label ID="Label1" runat="server" Text="Show rows:" />
                    <asp:DropDownList ID="ddlPageSize" runat="server" AutoPostBack="true" 
                        OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged">
                        <asp:ListItem Value="20" />
                        <asp:ListItem Value="50" />
                        <asp:ListItem Value="100" />
                    </asp:DropDownList>
                    &nbsp;
                    Page 
                    <asp:TextBox ID="txtGoToPage" runat="server" AutoPostBack="true" 
                        OnTextChanged="GoToPage_TextChanged" CssClass="gotopage" />
                    of
                    <asp:Label ID="lblTotalNumberOfPages" runat="server" />
                    &nbsp;
                    <asp:Button ID="btnPrev" runat="server" CommandName="Page" 
                        ToolTip="Previous Page" CommandArgument="Prev" CssClass="previous" />
                    <asp:Button ID="btnNext" runat="server" CommandName="Page" ToolTip="Next Page" 
                        CommandArgument="Next" CssClass="next" />                  
                </PagerTemplate>                      
            </asp:GridView>
        </div>
    </ContentTemplate>
</asp:UpdatePanel>

UpdatePanel中的GridView分页

同意,我测试了代码,grdUsers_PageIndexChanging()在我的代码中被调用。

亲爱的朋友如果你想要你自己的分页样式,那么你必须通过PageDataSource类实现你自己的分页。

点击查看代码

这个链接提供了如何在Datalist和Repeater中通过与在网格视图中实现分页相同的方式实现分页。那么gridview中将不会触发pageindex更改事件。

我不认为你做错了什么;它可能不会触发PageIndexChanged事件,它可能会触发RowCommand事件。附加到ItemCommand事件,它将接收事件。

HTH .