Kendo Ui Grille d'extraction de page uniquement le nombre de lignes sur la demande initiale
J'ai lu plusieurs posts ici et aussi les tutoriels sur Telerik site web, mais ils sont en manque, et la documentation est à l'arrêt.
En espérant une solution rapide après des heures de lecture.
Je suis en train d'utiliser un Kendo grille avec une énorme quantité de lignes (1M). Dans les exemples sur le site, je vois que le point de vue de contrôleur de l'action est de retour le jeu de données complet.
Récupération de toutes les lignes est très coûteux et le jeu de données est énorme.
Ma question est comment puis-je configurer la grille de manière que chaque rappel sera de retour la page suivante et l'appel d'offres initial ne sera pas de récupération de toutes les lignes à la fois?
Mon code est similaire à:
//Main controller action
public ActionResult Index()
{
List<items> listItems = GetAllItems(); //very expensive call!
return View(listItems);
}
//my view for that action
@(Html.Kendo().Grid(Model)
.Name("grid")
.Columns(columns =>
{
//some columns...
})
.Pageable(page=>page.PageSizes(true)) //Enable paging - I suspect here I can fix
.DataSource(datasource =>datasource.Ajax().PageSize(20).Read(read => read.Action("MoreItems", "Index")).ServerOperation(true)) //tried all sorts of things here
.Sortable()
.Filterable()
)
//the callbacks for the ajax
public ActionResult MoreItems([DataSourceRequest] DataSourceRequest request)
{
return Json(GetAllItems().ToDataSourceResult(request));
}
//add some cache just to see what was holding the thing up
[OutputCache(Duration = 3600, VaryByParam = "none")]
private static List<items> GetAllItems()
{
//some code to retrieve items
}
(à partir d'exemples qu'il ressemble à l'appel initial est de retourner le modèle complet - et les appels suivants à la Products_Read sont sur le filtre de l'objet. Comment l'appel initial être filtré, mais de permettre par la suite de pagination dans mon cas, j'ai+ de 100k lignes et il est impossible de faire "retour de Vue(modèle") ) Merci!
OriginalL'auteur Avner Barr | 2013-02-17
Vous devez vous connecter pour publier un commentaire.
Semble qui n'ont pas été très chanceux avec Kendo de l'information... Ce que vous cherchez est appelé
serverPaging
(la documentation dans le cadre de la source de données dans ici).Pour chaque demande de votre serveur d'envoi:
take
contient le nombre d'enregistrements à récupérerskip
le nombre d'enregistrements à partir de l'avant de l'ensemble de données pour commencer la lecturepage
l'index de la page de donnéespageSize
le nombre d'enregistrements par pageVous pouvez également envisager d'utiliser
scrollable.virtual
(documentation en ici où les pages suivantes sont chargés pendant que vous faites défiler vers le bas dans la grille.Cet exemple (http://demos.kendoui.com/web/grid/remote-data.html) utilise
serverPaging
.OriginalL'auteur OnaBai
Il semble que vous n'êtes pas familier avec le Expression LINQ moteur. L'ensemble de la collection est jamais récupérée. Le ToDataSourceResult méthode est en train de faire exactement ce que l'application de la pagination/tri/regroupement sur un niveau de base de données (grâce à ce moteur de l'expression).
Vous n'avez rien à faire - il suffit de passer le IQueryable collection (qui détient tous les records) à la DataSourceResult, ne pas appeler ToList avant cette(ou quelque chose de similaire) ou de la magie qui va être cassé 🙂
Je ne comprends pas que vous , pourriez-vous préciser?
Je ne suis pas à l'aide de l'entité ou de quelque chose qui peut faire du lazy loading. Je suis sur le réseau et l'extraction de la structure du fichier, les attributs de métadonnées etc. C'est lent, donc je veux avoir certaines données factices dans la grille, et seulement lorsque la grille est affichée la page et l'appel ajax vers le serveur de filtrage, en réalité chercher ces fichiers. Le problème est que je n'ai pas pu envoyer seulement "1 page" d'une valeur de données pour la grille et avoir la grille de demander sans arrêt des pages supplémentaires. La grille de ne montrer qu'une seule page, et ne pas continuer à faire des requêtes au serveur pour le prochain.
Je voudrais être en mesure de configurer la grille d'avoir, disons, 1000 lignes, alors que, initialement, à seulement envoyer des 20, si la grille des demandes de la page suivante, puis aller sur le réseau et de récupérer les données. Dans 99,9999% des temps, le premier de 3 à 10 pages de données sont suffisantes, mais encore j'ai besoin de la capacité à la requête de toutes les données.
J'espère que cela est clair 🙂
OriginalL'auteur Petur Subev