2016-04-15 51 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