2009-02-19 10 views
11

Próbuję dowiedzieć się, mechanika stronicowania ASP.NET GridView, więc mogę użyć rodzimej funkcjonalności ramy zamiast mojej domowej roboty ręczne paginiarskie mojej firmy, które wymagają wiele pracy do wdrożenia.Ręczne ustawianie PageCount strony GridView, gdy DataSource nie zwraca pełnego zestawu wyników?

Wymyśliłem wszystko, z wyjątkiem tego, jak uzyskać właściwość PageCount do pracy z naszymi usługami sieciowymi na stronie GridView. Obecnie nasze serwisy internetowe zwróci całkowitą liczbę rekordową jak następuje:

public object[] GetStuffMethod(int pageNum, int recordsPerPage, out int totalRecords) 

To działa prawidłowo z GridView, jednak dokumentacja Znalazłem mówi, że GrideView „s PageCount nieruchomość jest generowany z łącznych zapisów w DataSource. Czy naprawdę nie ma sposobu, aby ustawić PageCount na podstawie czegoś innego niż zwrot wszystkich rekordów?

W moim źródle danych mogą znajdować się dziesiątki tysięcy rekordów, więc wolałbym nie wybierać ich wszystkich, aby licznik stron GridView działał. Prawdopodobnie mógłbym zignorować licznik stron GridView i obliczyć go samodzielnie, ale jeśli framework ma na to sposób, wolałbym go użyć.

+0

wypróbowałeś odpowiedzi? – eglasius

Odpowiedz

8

Zdecydowanie zalecamy, aby przejść trasę ObjectDataSource.

Jeśli nie jesteś zaznajomiony z tym podejściem Oto podstawy:

1) Zamiast ręcznego ustawiania właściwości grid.DataSource w kodzie tyłu, należy dodać dodatkowy element do strony. Ustawiasz DataSourceID siatki na id twojego ObjectDataSource.

2) Tutaj można uzyskać prawdziwą kontrolę. Tworzysz nową klasę i nadajesz jej dwie funkcje "SelectRows()" i "GetCount()". Możesz umieścić swoją logikę w obu funkcjach i zoptymalizować ją do treści swojego serca. Zachęcamy do korzystania z usług internetowych, jeśli jest to potrzebne do pracy, ale w ramach tej metody można wywołać jeden z nich, aby zwrócić wiersze i inne, aby zwrócić liczbę.

3) użyj edytora właściwości ObjectDataSource, aby połączyć go z klasą i włączyć paging. Wszystko gotowe!

Sugeruję wypróbowanie The Code Project's Example of using ObjectDataSource and GridView, ponieważ jest to wyraźnie zamierzony sposób wspierania tego, co chcesz.

Powodzenia!

5

Musisz ustawić AllowCustomPaging = "true". A kiedy Databinding zrobić:

mygrid.VirtualItemCount = totalRecords; 
mygrid.DataSource = mysource; 
mygrid.DataBind(); 

aktualizacji 1: Powyżej jest tylko DataGrid. Niestety jedynym obsługiwanym sposobem stronicowania po stronie serwera z gridview jest implementacja źródła danych obiektu lub implementacja niestandardowego źródła danych. Oto powiązany dokument msdn http://msdn.microsoft.com/en-us/library/5aw1xfh3.aspx.

Aktualizacja 2: Ta metoda działa teraz z GridView jak .NET 4.5

+1

VirtualItemCount działa tylko z kontrolkami DataGrid. W GridView ta właściwość nie istnieje, w przeciwnym razie użyłbym jej. –

+1

@ Czy masz rację, dodałem aktualizację o tym - w zasadzie jesteś zmuszony iść z obiektemdatasource lub niestandardowym źródłem danych. Dodano link do dokumentu msdn. – eglasius

+3

Ta właściwość wydaje się istnieć na GridView od .Net 4.5 [msdn] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.virtualitemcount% 28v = vs.110% 29.aspx) – sparebytes

Powiązane problemy