2013-01-12 8 views
5

Il metodo di estensione che KendoUI aggiunge (ToDataSourceResult) sembra non funzionare su Pages> Pagina # 1. Funziona bene la prima volta che la pagina viene caricata, ma poi quando provo ad usarlo con lo scrolling virtuale, per recuperare le pagine, 2,3,4 ... N in modo asincrono, il metodo ignora tutti i dati nell'oggetto IEnumerable che sto provando trasformare.ToDataSourceResult Estensione che non popola l'oggetto DataSourceResult

Il mio codice è il seguente:

Ho un controller MVC che recupera i dati in questo modo:

Database database = Database.GenerateDatabase(); 
ResultSet queryResults = database.GetEvents( 
    FilterHelper.GenerateQueryCriteria((List<IFilterDescriptor>) request.Filters, request.Page, request.PageSize) 
); 

Database.GetEvents restituisce un oggetto in questo modo:

public class ResultSet { 

    public List<ResultSetRow> Set; 
    public int PageRowCount; 
    public int TotalRecordCount; 
} 

Ogni ResultSetRow , è un'istanza di una classe che ha 1 stringa e 2 inte come proprietà.

A questo punto, ho impostato un punto di interruzione e ispezionato il contenuto di ResultSet.Set. Il database sta compilando correttamente l'elenco con tutti i record specificati con request.PageSize. Ho confermato che i risultati vengono restituiti per qualsiasi numero di pagina.

La fase successiva, tutto va male:

DataSourceResult result = ((IEnumerable<ResultSetRow>) queryResults.Set).ToDataSourceResult(request); 

ho ispezionare il contenuto dell'oggetto DataSourceResult, e la sua proprietà di matrice 'Dati' è vuoto.

Perché il mio modello (ResultSetRow) non riesce a convertire nell'oggetto DataSourceResult di Kendo?

Alcune informazioni aggiuntive:

  • Aggregati, non vengono utilizzati i gruppi, ordinamenti e filtri.
  • Il numero di risultati restituiti da Database.GetEvents corrisponde alla dimensione della pagina richiesta.

Grazie per il vostro aiuto SO comunità

risposta

11

La ragione principale per l'utilizzo ToDataSourceResult() è che funziona il filtraggio/ordinamento/raggruppamento/paging sul server di database. Di conseguenza, funziona meglio se viene fornito un IQueryable che non è stato ancora eseguito.

Funziona su un IEnumerable, ma in seguito è necessario caricare l'intera tabella in memoria, che non è scalabile.

Poiché si ottengono solo i dati di una pagina, quando viene chiamato ToDataSourceResult, si ritiene che siano tutti i dati nel database e quindi restituisce una lista vuota per pagine diverse dalla prima.

+0

Quindi, se dovessi ignorare l'utilizzo di DataSourceResult, potrei fare direttamente un json sul mio oggetto List ? –

+1

@JT potresti ... ma Kendo genererà già la query del database corretta per te, quindi dovresti reinventare la ruota. E la versione di Kendo funzionerà quando si attiva il filtro/ordinamento/... –

+5

Ok, in base al tuo feedback ho sviluppato un lavoro in giro: int pagenum = request.PageNum; request.PageNum = 1; DataSourceResult = ...; request.PageNum = pagenum; –

Problemi correlati