2011-04-11 115 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中觸發。