Metoda rozszerzenia, którą KendoUI dodaje (ToDataSourceResult), wydaje się nie działać na Stronach> Strona # 1. Działa to dobrze przy pierwszym ładowaniu strony, ale kiedy próbuję użyć go z wirtualnym przewijaniem, aby pobrać strony, 2,3,4 ... N asynchronicznie, metoda ignoruje wszystkie dane w obiekcie IEnumerable, którego próbuję przekształcać.Rozszerzenie ToDataSourceResult nie wypełnia obiekt DataSourceResult
Mój kod wygląda następująco:
Mam kontroler MVC, które pobiera dane tak:
Database database = Database.GenerateDatabase();
ResultSet queryResults = database.GetEvents(
FilterHelper.GenerateQueryCriteria((List<IFilterDescriptor>) request.Filters, request.Page, request.PageSize)
);
Database.GetEvents zwraca obiekt tak:
public class ResultSet {
public List<ResultSetRow> Set;
public int PageRowCount;
public int TotalRecordCount;
}
Każdy ResultSetRow , jest instancją klasy, która ma 1 łańcuch znaków i 2 znaki jako właściwości.
W tym miejscu ustawiam punkt przerwania i sprawdzam zawartość ResultSet.Set. Baza danych poprawnie wypełnia listę tak dużą liczbą rekordów, jak podano w request.pageSize. Potwierdziłem, że zwracane są wyniki dla wszystkich numerów stron.
Następny etap, wszystko idzie źle:
DataSourceResult result = ((IEnumerable<ResultSetRow>) queryResults.Set).ToDataSourceResult(request);
I sprawdzać zawartość obiektu DataSourceResult, a jego właściwość array „dane” jest pusta.
Dlaczego mój model (ResultSetRow) nie konwertuje obiektu DataSourceResult Kendo?
Niektóre dodatkowe info:
- Kruszywa grupy, sortuje i filtry nie są używane.
- Liczba wyników zwróconych przez Database.GetEvents odpowiada rozmiarowi żądanej strony.
Dzięki za pomoc SO społeczności
Tak więc, jeśli miałbym zignorować użycie DataSourceResult, czy mógłbym tylko bezpośrednio przesłać mój obiekt List? –
@JT mógłbyś ... ale Kendo już wygeneruje dla ciebie poprawną kwerendę do bazy danych, więc wymyślisz na nowo koło. Wersja Kendo będzie działać po włączeniu filtrowania/zamawiania/... –
Ok, w oparciu o twoją opinię Rozwinąłem pracę: int pagenum = request.PageNum; request.PageNum = 1; DataSourceResult = ...; request.PageNum = pagenum; –