我想使用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