2016-09-28 13 views
1

私はDataPagerでListViewを持っています。 ListViewはコードビハインドのDataTableにバインドされています。不正なStartRowIndexを返すASP DataPager

ページャに10ページのリンクが表示され、10ページ以上のデータがあるとします。それらの11個のボタン(10ページと11ページを指すオーバーフロー楕円)は正常に機能します。 [Next]と[Previous]のリンクも正常に動作します。

First page of pages

私は省略記号をクリックして、11ページに行くしかし、一度、リンクがまだページの最初のページからのオフセットを指します。つまり、ページ12をクリックすると、ページ3(ページ1は新しいページ10の楕円、ページ2はページ11)にダンプされます。次と前のリンクと他のすべての数値リンクと同じです。ブラウザのコンソールにコードを見てみると

Second page of pages

、それが印刷ページの各ページへのリンク__doPostBackの呼び出しで同じ引数を作業していても(他の人の)ページャのように見えます。だから、私はページャの全体的なオフセットをどのように保持しているのか分かりません。ページの各ページは、それ自身に相対的なオフセットを与えるからです。

DataSourceID属性のデータソースではなく、コードビハインドのDataTableにListViewをバインドする以外に、私は他の人とは違ったやり方をしています。しかし、ページャはページの最初のページを適切にページ付けするので、私はそれを捨ててしまうのは私のバインディングだとは思わない。

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

。 e.StartRowIndexを見ると

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(); 
} 

も(10の項目/ページ@、「20」を返しますすなわち。12ページ)高のページのページのオフセットの最初のページが表示されます。

答えて

0

これは、ようSessionPageStatePersisterとPageStatePersisterをオーバーライドに明らかにした:

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

私はそのページ全体の状態でオフセット店舗と私はページを変更したときには、何らかの形で迷子になったDataPagerを推測しています州の行動。

オーバーライドを削除すると、意図したとおりに機能します。

関連する問題