2011-04-11 59 views
0

我有一个UpdatePanel和一个GridView。我有一个分页问题:当我按Next按钮时,grdUsers_PageIndexChanging()没有被调用,所以页面保持为1,如果以前我改变了ddlPageSize中的选择,现在它返回到初始选择。 此外,如果我在第一页上,则Previous按钮不会被禁用,并且按下它会导致Out Of Range错误。 我在做什么错? 谢谢。UpdatePanel中的GridView分页

<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> 
+0

您能否显示此事件代码grdUsers_PageIndexChanging() – 2011-04-11 13:48:42

回答

0

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

HTH。

+0

谢谢您的回答。我没有看到ItemCommand事件。你能解释一下吗? – dpreznik 2011-04-11 13:12:28

+0

错误可能是它的RowCommand,得到错误的事件名称。 RowCommand触发每个点击的命令;这是一个万能的事件,所以它也会触发分页等。一些事件只能通过RowCommand来处理,并且会处理您的自定义命令。 – 2011-04-11 14:53:33

0

同意,我测试了代码,并在我的地方调用了grdUsers_PageIndexChanging()。

0

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

Click to view code

此链接为您提供如何实现通过同样的方式,在DataList和Repeater分页您将实现在网格视图的分页。 然后,没有pageindex更改事件将在gridview中触发。