2016-09-28 4 views
1

Ich habe einen ListView mit einem DataPager. Der ListView ist im Code-Behind an eine DataTable gebunden.ASP DataPager gibt einen falschen StartRowIndex zurück

Also sagen wir, dass ich den Pager 10 Seiten-Links anzeigen lasse und ich habe mehr als 10 Seiten Daten. Diese 11 Tasten (die 10 Seiten plus die Überlaufellipse, die auf Seite 11 zeigen) funktionieren gut. Die Links Next und Previous funktionieren ebenfalls gut.

First page of pages

aber sobald ich auf die Ellipsen klicken und gehen Sie auf Seite 11, zeigen die Links noch zu Verschiebungen von der ersten Seite der Seiten. Das heißt, das Klicken auf Seite 12 bringt mich auf Seite 3 zurck (Seite 1 ist die neue Seite 10 Ellipsen, Seite 2 ist Seite 11). Das gleiche gilt für die Links Next und Previous und alle anderen numerischen Links.

Second page of pages

im Browser-Konsole auf den Code sucht, sieht es wie auch (andere Menschen) Pagers, die für jede Seite von Seiten gedruckt werden die gleichen Argumente in den Links' __doPostBack Ruf arbeiten. Ich bin mir also nicht sicher, wie der Pager seinen Gesamtversatz beibehält, da jede Seite nur Versatzwerte zu sich selbst liefert.

Ich bin wirklich ratlos für das, was ich anders mache als andere Leute, abgesehen von der Bindung meiner ListView an eine DataTable in der Code-behind eher als eine Datenquelle in der DataSourceID Attribut. Aber der Pager paginiert richtig für die erste Seite der Seiten, also glaube ich nicht, dass es nur meine Bindung ist, die es abwirft.

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

bei e.StartRowIndex Blick zeigt auch die erste Seite des Offsets Seite für höhere Seiten (dh. Seite 12 wird „20“, @ 10 Artikel/Seite zurück).

Antwort

0

Dies war offensichtlich aufgrund des PageStatePersister mit einem SessionPageStatePersister zu überschreiben, wie so:

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

Ich vermute, das Datapager speichert seine insgesamt im Seitenzustand versetzt und das war irgendwie verloren, wenn ich die Seite geändert das Verhalten des Staates.

Durch Entfernen der Übersteuerung konnte das Gerät wie gewünscht arbeiten.

Verwandte Themen