2016-04-15 18 views
0

Ich versuche, eine Antwort auf die obige Frage ohne viel Erfolg zu finden - vielleicht stelle ich die falsche Frage oder die falsche Vorgehensweise.ListView Control - mehr Artikel

Ich benutze C#, Asp.Net, aber immer noch auf Version 4 des Frameworks.

Ich benutze ein ListView-Steuerelement, um eine endliche Anzahl von Elementen anzuzeigen. Normalerweise würde ich 10 Elemente anzeigen und Paging hinzufügen, jedoch suche ich bei dieser Gelegenheit einen etwas anderen Ansatz.

Wie viele moderne Apps möchte ich einen "more" -Button hinzufügen und einfach an die bereits vorhandenen Seitenelemente anhängen, aber ich kann nicht sehen, wie das möglich ist. Sicher kann ich zurückgehen und 20 Sachen bekommen, anstatt 10 dann wieder zu binden, aber nach ein paar Klicks (30, 40, 50 ...) wird das wahrscheinlich unhandlich und sehr langsam.

Ich habe nicht viel mit Ajax getan, also könnte es ein alternativer Weg sein, um zu verfolgen, aber anstatt direkt zu tauchen, um es völlig falsch zu machen, würde ich mich über Ratschläge freuen, wie man es am besten angeht.

Vielen Dank im Voraus.

+0

Wenn die Frage Datenbank betrifft, können Sie hier finden, wie Abfrageergebnis zu paginieren: http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server .aspx Können Sie etwas Code posten? Ist es eine Lösung Server-Seite richtig? Kann ich vorschlagen, einen Repeater anstelle von ListView zu verwenden? – Emanuele

+0

Ich weiß, wie Abfrageergebnis paginieren, aber was ich frage, ist nicht Paginierung - es erweitert die Daten, anstatt sie zu ersetzen. –

+0

Sie könnten einige Ideen erhalten, indem Sie in ASP.NET ListViews nach "unendliches Scrollen" suchen. Hier ist ein Link, der einige interessante Referenzen bietet: https://social.msdn.microsoft.com/Forums/windowsapps/en-US/9d3cadd3-dc95-4219-9f90-e1aae6ad25c8/infinite-scrolling-with-listview?forum= winappswithcsharp. – ConnorsFan

Antwort

0

Sie können es serverseitig oder clientseitig realisieren.

Server Side - Angenommen, ein

List<Foo> foos = new List<Foo>(); 
private FillList() 
{ 
    //... 
} 

private int CurrentPage 
    { 
     get 
     { 
      object obj = ViewState["CurrentPage"]; 
      if (obj != null) 
       return (int)obj; 
      return 0; 
     } 
     set 
     { 
      ViewState["CurrentPage"] = value; 
     } 
    } 

private void RptBind(int curPage, int pageSize) 
{ 
    rptFoos.DataSource = foos.Skip(pageSize * curPage).Take(pageSize); 
    rptFoos.Databind(); 
} 

protected void btnNext_Click(object sender, EventArgs e) 
{ 
    CurrentPage += 1; 
    RptBind(CurrentPage, 10); 
} 

und den Repeater haben:

<asp:Repeater runat="server" id="rptFoos"> 
    <ItemTeplate> 
      <asp:Label runat="server" id="lblFoo" Text="<%# ((Foo)Container.DataItem).Name %>"> 
    </ItemTemplate> 
</asp:Repeater> 
<asp:Button runat="server" id="btnNext" Text="Next" OnClick="btnNext_Click"> 

Above Code nicht getestet.

+0

Noch einmal, das ist Paging und ich bin nicht auf der Suche nach Paging - ich freue mich auf die Datenquelle zu erweitern, anstatt es jedes Mal zu ersetzen - so zum ersten Mal kann ich 10 Ergebnisse zeigen, das nächste Mal 20, das nächste Mal 30 und bald. –

+0

Sie können diesen Code einfach ändern: 'foos.Skip (pageSize * curPage) .Take (pageSize);' – Emanuele