WPF Datagrid: Chargement Paresseux / Inifinite de défilement
- Je remplir la grille de données avec 250 lignes. Lorsque l'utilisateur fait défiler à l'aide de la barre de défilement (en dessous de 75% par exemple), je veux extraire les 250 prochaines lignes à partir de la base de données, et ainsi de suite. L'idée est que la grille pourrait avoir des millions de résultats, et nous ne voulons pas les charger, jusqu'à ce que l'utilisateur en fait la demande. Il y a un mécanisme en place pour cela?
EDIT: Car il semble y avoir beaucoup de confusion: je ne suis pas à la recherche pour le standard de données des solutions de virtualisation, j'ai déjà utiliser eux. Mais ils ont tous besoin de spécifier le nombre de "virtuel lignes' à l'avance, et que la requête est onéreux pour moi. La raison pourquoi ils ont besoin, c'est parce que ça rend les choses beaucoup plus facile de calculer la page en cours/offset/etc lorsque vous connaissez le nombre total d'éléments dans la grille. Mais c'est un très coûteux sql de la requête pour calculer ce montant, donc je veux migrer vers une autre solution où je ne peux ignorer le COMTE (le) de la requête.
Vous avez raison. Mais cette question, qui a accepté d'utiliser datavirtualization " comme une réponse. J'ai déjà l'utiliser, donc pour moi ce n'est pas de répondre à la question, juste une alternative.
Maintenant, je suis le point. La virtualisation peut vous aider lorsque un DataContext/ItemsSource déjà lié à tout un ensemble de données, mais vous avez besoin d'un chargement différé sur l'accès aux données de niveau
Êtes-vous à l'aide de WPF 3.5 ou WPF 4?
Demandez-vous de l'INTERFACE utilisateur de Virtualisation ou de Virtualisation de Données? Si l'INTERFACE utilisateur, la réponse ci-dessous est correct. Si des Données, le lien sll affiché est correct.
OriginalL'auteur Muis | 2011-09-28
Vous devez vous connecter pour publier un commentaire.
Ressemble tellement à la Virtualisation de la propriété de la grille de données ne serait pas vous aider, car il nécessite un ensemble de données complet pour être dans le
ItemsSource
.Afin de disposer de données chargement différé (Voir un article Virtualisation De Données) Vous pouvez gérer ScrollViewer.ScrollChanged événement et d'appliquer un classique de la pagination côté serveur approche. Fondamentalement, vous devez définir et calculer de telles chante comme
Page Size
,Page Number
,Sort Order
de cette façon vous pouvez demander à partir d'une base de données requise ensemble de données et l'afficher sur l'INTERFACE utilisateur. Chaque fois quandCurrent Page Number
ouSort Order
est en train de changer, vous devez demander des données et de mise à jourItemsSource
de la grille, peut-être vous avez besoin de restaurer la Position de Défilement en tant que bien, mais je ne suis pas sûr que dans cette.Je crois qu'un principal défi serait de calculer une valeur de Taille de Page, Numéro de la Page Actuelle. Je crois Défilement Logique mode qui pourrait vous aider dans cette.
Avez-vous eu la chance d'essayer cette Muis?
OriginalL'auteur sll
Ensemble de DataGrid
EnableRowVirtualization
propriététrue
Lignes sera donc chargé lorsque l'utilisateur fait défiler, de sorte que seules les lignes visibles sera effectivement chargé
Vous ne semblent pas avoir compris la question, la virtualisation crée seulement la représentation visuelle de données lorsque cela est nécessaire, la question était de savoir comment récupérer ces données uniquement lorsque cela est nécessaire, c'est sur un calque différent.
Maintenant, je comprends la question, que votre modification faite plus clair 🙂 désolé pour vous induire en erreur :/
OriginalL'auteur Damascus