Próbuję użyć programu DataPager do stronicowania po stronie serwera. Oto mój kodJak używać programu DataPager z funkcją stronicowania po stronie serwera?
<asp:DataPager ID="pgrFooBars" PagedControlID="lvFooBars"
QueryStringField="page" runat="server" >
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
Code Behind pochodzi RobConery za post http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/
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.
Problem polega na tym, że DataPager wydaje się używać właściwości Count z ListView do określenia całkowitej liczby rekordów, która w tym przypadku wynosi 20. W pewnym sensie musi wiedzieć, że istnieje 1500 rekordów, a nie 20 łącznie . DataPager ma właściwość TotalRowCount, ale jest to tylko do odczytu.
Nigdy nie widziałem przykład DataPager z stronicowania po stronie serwera, ale założyć, że można wykonać stronicowania po stronie serwera, w przeciwnym razie co dobre jest atrybut QueryStringField?
Jestem świadomy, że można zrobić niestandardowe rozwiązanie stronicowania przy użyciu metodologii, takiej jak 4GuysFromRolla, tutaj http://www.4guysfromrolla.com/articles/031506-1.aspx, ale najpierw chciałbym wiedzieć, czy rozwiązanie z DataPager jest możliwe przed stworzeniem niestandardowego rozwiązania.
UPDATE Im więcej patrzę, tym bardziej, że wracam do wniosku, że nie jest to możliwe i że, niestety, datapager jest kontrola przeznaczona wyłącznie dla małych stron internetowych. To, co chcę zrobić, powinno być naprawdę proste, jeśli kontrola została poprawnie zbudowana. Chcę móc powiedzieć
dpFooBars.TotalRowCountComputed = false;
dpFooBars.TotalRowCount = AnyNumberThatISoChoose;
Szukałem jakiegoś włamania się osiągnąć to samo, ale wydaje się, że datapager za TotalRowCount obliczany jest od faktycznej liczby elementów w źródle danych, że to wiąże się z . Wydaje mi się bardzo dziwne, że Microsoft utworzyłby w tym samym czasie klasę ListViewPagedDataSource() i DataPager, ale nie sprawiłaby, że działałyby one poprawnie razem, ale wydaje się, że tak się stało.
UPDATE 2 (AHA chwili?) Wydaje się, że to było możliwe do zrobienia po stronie serwera stronicowania od .NET 2.0 przy użyciu ObjectDataSource i dostosowywania SelectCountMethod(). Uważam, że powinno być możliwe dostosowanie ObjectDataSource do moich potrzeb. Hmmm. Wyjeżdżam na weekend, więc będzie to dla mnie kilka dni, aby sprawdzić, czy to działa. Bądźcie czujni, prawdziwie wierzący.
Jesteś aplikacją webform lub Asp.Net MVC? – Sharique