UpdatePanel中的GridView分页

时间:2011-04-11 12:48:45

标签: c# asp.net ajax

我有一个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>

3 个答案:

答案 0 :(得分:0)

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

HTH。

答案 1 :(得分:0)

同意,我测试了代码,并在我的网站上调用了grdUsers_PageIndexChanging()。

答案 2 :(得分:0)

亲爱的朋友 如果你想要自己的分页风格,那么它们是在gridview中的构建分页中,那么你必须通过PageDataSource类实现自己的分页。

Click to view code

此链接为您提供了如何在Datalist和Repeater中实现分页,方法与在网格视图中实现分页相同。 然后在gridview中不会触发pageindex change事件。