2016-09-28 65 views
1

我有一個ListView與DataPager。 ListView綁定到代碼隱藏中的DataTable。ASP DataPager返回不正確的StartRowIndex

因此,假設我將傳呼機設置爲顯示10頁鏈接,並且有超過10頁的數據。這11個按鈕(10頁加上指向第11頁的溢出橢圓)工作得很好。 Next和Previous鏈接也可以很好地工作。

First page of pages

但是,一旦我點擊省略號並轉到第11頁,鏈接仍然指向從頁面的第一頁偏移。也就是說,點擊第12頁會在第3頁轉儲我(第1頁是新的第10頁省略號,第2頁是第11頁)。與Next和Previous鏈接以及所有其他數字鏈接相同。

Second page of pages

望着在瀏覽器控制檯中的代碼,它看起來像連(其他人的),其正在打印相同的參數中的鏈接__doPostBack呼籲頁每一頁尋呼機。所以,我不確定傳呼機是如何保留它的整體偏移量的,因爲每頁頁面都會給出相對於它們自己的偏移量。

我真的不知道我在做什麼不同於其他人,除了將我的ListView綁定到代碼隱藏中的DataTable而不是DataSourceID屬性中的數據源之外。但是,傳呼機頁面的第一頁正確分頁,所以我不認爲這只是我的約束力,它扔掉了。

<asp:ListView ID="lvProjects" runat="server" GroupPlaceholderID="groupPlaceHolder" 
    ItemPlaceholderID="itemPlaceHolder" OnPagePropertiesChanging="OnPagePropertiesChanging" 
    DataKeyNames="ProjectID" OnPreRender="lvProjects_PreRender"> 
    <LayoutTemplate> 
      <asp:DataPager ID="DataPager" runat="server" PagedControlID="lvProjects" PageSize="10"> 
       <Fields> 
        <asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="true" ShowPreviousPageButton="true" ShowNextPageButton="false" 
         FirstPageText="|&lt;&lt;" PreviousPageText="&lt;" RenderNonBreakingSpacesBetweenControls="true" /> 
        <asp:NumericPagerField ButtonType="Link" ButtonCount="10" RenderNonBreakingSpacesBetweenControls="true" /> 
        <asp:NextPreviousPagerField ButtonType="Link" ShowNextPageButton="true" ShowLastPageButton="true" ShowPreviousPageButton="false" 
         NextPageText="&gt;" LastPageText="&gt;&gt;|" RenderNonBreakingSpacesBetweenControls="true" /> 
       </Fields> 
      </asp:DataPager> 
     <br /> 
     <br /> 
     <table class="myGrid projects-table"> 
      <tbody> 
       <asp:PlaceHolder ID="itemPlaceHolder" runat="server" /> 
      </tbody> 
     </table> 
    </LayoutTemplate> 
    <ItemTemplate> 
     ... 
    </ItemTemplate> 
</asp:ListView> 

protected void OnPagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e) 
{ 
     var pager = (DataPager)lvProjects.FindControl("DataPager"); 

     pager.SetPageProperties(e.StartRowIndex, e.MaximumRows, false); 

     lvProjects.DataSource = Projects; 
     lvProjects.DataBind(); 
} 

看着e.StartRowIndex也將顯示頁面的偏移量較高的頁面的第一頁(即第12頁將返回「20」,@ 10條/頁)。

回答

0

這顯然是由於與SessionPageStatePersister爲使重寫PageStatePersister:

protected override PageStatePersister PageStatePersister 
{ 
    get 
    { 
     return new SessionPageStatePersister(this); 
    } 
} 

我猜DataPager的存儲其整體頁面狀態偏移,並且在某種程度上迷路時,我改變了頁面國家的行爲。

刪除覆蓋允許其按預期工作。