2016-04-15 69 views
0

我試圖找到答案對上述問題沒有取得多大成功 - 或許我問錯了問題或採取錯誤的做法。ListView控件 - 獲得更多項目

我使用C#,Asp.Net,但仍然在框架的4版本。

我使用一個列表視圖控件來顯示項目的數量有限。通常,我會顯示10個項目並添加分頁,但是我正在尋找一種略有不同的方法。

像許多現代的應用程序,我wan't添加一個「更多」按鈕,並簡單地追加到我已經有網頁的項目,但我看不出這怎麼可能。當然,我可以回去拿20件東西,而不是10件,然後重新綁定,但是在點擊幾次後(30,40,50 ...),這很可能會變得非常慢,很慢。

我對Ajax沒有做太多的工作,所以它可能是一種可以追求的途徑,但並不是在完全錯誤的情況下潛水,而是希望得到一些關於如何最好地接近它的建議。

在此先感謝。

+0

如果問題涉及到數據庫,你可以在這裏找到如何分頁查詢結果:http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server .aspx 你能發表一些代碼嗎?它是正確的解決方案服務器端? 我可以建議使用Repeater而不是ListView嗎? – Emanuele

+0

我知道如何分頁查詢結果,但我要求的不是分頁 - 它擴展數據而不是替換它。 –

+0

您可以通過在ASP.NET ListViews中搜索「無限滾動」來獲得一些想法。以下鏈接提供了一些有趣的參考資料:https://social.msdn.microsoft.com/Forums/windowsapps/en-US/9d3cadd3-dc95-4219-9f90-e1aae6ad25c8/infinite-scrolling-with-listview?forum= winappswithcsharp。 – ConnorsFan

回答

0

可以實現它的服務器端或客戶端。

服務器端 - 假設有一個

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

和中繼器:

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

上面的代碼是未經測試。

+0

再次,這是分頁,我不尋找分頁 - 我期待擴展數據源,而不是每次都更換 - 所以第一次我可能會顯示10個結果,下一個20,下一個30和等等。 –

+0

您可以輕鬆更改此代碼: 'foos.Skip(pageSize * curPage).Take(pageSize);' – Emanuele