我想使用DataPager做服务器端分页。这里是我的代码如何将DataPager与服务器端分页一起使用?
<asp:DataPager ID="pgrFooBars" PagedControlID="lvFooBars"
QueryStringField="page" runat="server" >
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
ConfigureBlogPostListView();
}
private void ConfigureBlogPostListView()
{
int pageNum;
int.TryParse(Request.Params["page"], out pageNum);
int pageSize = 20;
PagedList<IFooBar> FooBars = FooService.GetPagedFooBars(
new PagingSettings(pageNum, pageSize));
ListViewPagedDataSource ds = new ListViewPagedDataSource();
ds.AllowServerPaging = true;
ds.DataSource = FooBars;
ds.MaximumRows = pageSize;
ds.StartRowIndex = pageNum;
//TotalCount is the total number of records in the entire set, not just those loaded.
ds.TotalRowCount = FooBars.TotalCount;
lvFooBars.DataSource = ds;
lvFooBars.DataBind();
pgrFooBars.PageSize = pageSize;
pgrFooBars.SetPageProperties(pageNum, FooBars.TotalCount, true);
}
PagedList来自RobConery的有用的帖子http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/。
问题是DataPager似乎使用ListView的Count属性来确定记录的总数,在这种情况下是20。不知何故,它需要知道有1,500个记录,而不是20个记录。 DataPager有一个属性TotalRowCount,但是这是只读的。
我从来没有见过使用服务器端分页的DataPager示例,但假定它可以执行服务器端分页,否则QueryStringField属性有什么好处?
我知道你可以使用4GuysFromRolla在这里做的http://www.4guysfromrolla.com/articles/031506-1.aspx这样的方法来做一个自定义分页解决方案,但是我首先想知道在创建自定义解决方案之前是否可以使用DataPager解决方案。
UPDATE 我越是看这个,越觉得我来的结论是,这是不可能的,不幸的是,DataPager的是控制意味着只有小网站。如果控件构建正确,我想要做的事情应该非常简单。我想可以说
dpFooBars.TotalRowCountComputed = false;
dpFooBars.TotalRowCount = AnyNumberThatISoChoose;
我一直在寻找一些黑客来完成同样的事情,但现在看来,DataPager的的TotalRowCount是从它绑定到数据源项目的实际数量计算。对我来说,看起来很奇怪,微软会同时创建一个ListViewPagedDataSource()类和一个DataPager,并且它们不会一起正确工作,但这似乎是发生了什么。
更新2(AHA时刻?) 看来,它已通过使用一个ObjectDataSource和定制SelectCountMethod是不可能做服务器端分页因为NET 2.0()。我相信应该可以自定义ObjectDataSource来满足我的需求。嗯。我要在周末外出,所以我需要几天的时间才能看到这是否有效。敬请关注,真正的信徒。
你的应用程序是webform应用程序或Asp.Net MVC? – Sharique 2010-07-14 12:14:52