Tutorial 8 – Configurer mon arbre en lazy loading

Published 20 August 10 05:22 AM | Nico

La vidéo du Tutorial

 

Binding relationnel

Ajoutons un noeud fils à notre arbre.

Sélectionnez la vue ADWTree et le nœud ProductCategory

Cliquez sur le bouton Add Child clip_image002 pour ajouter un nœud Child.

Nous voulons que le nœud Child soit contextuel, c'est-à-dire que les données dépendent du Parent. En fait, les SubCategory affichées sont les SubCategory de la Category Parent.

Cliquez sur la case à cocher Contextual Node.

Le DataName que vous pouvez choisir est contextuel au DataName du nœud Parent, via une Relation du Schema.

Sélectionnez le DataName   .ProductSubcategoryProductCategory.ProductSubcategory

Les Nœuds fils suivront la relation Parent/Child selon le Schema.

image

Associez la Property Text du Nœud à la colonne Name de la Table.

Sauvegardez la configuration.

Lancez l’application pour constater le 2ème niveau de l’Arbre.

image

Mais il n’y a pas de 2ème niveau ! Nous avons beau ouvrir les Nœuds Category, il n’y a pas de nœuds Child !

Ceci est en fait normal. Souvenez-vous que c’est la commande Server, appelée au chargement de la fenêtre, qui charge les données. Or le code de cette commande ne charge que les ProductCategory. Nous pouvons modifier notre code pour charger en même temps les ProductSubCategory :

        DataSet IADWService.LoadInitialData()
        {
            IDataManager dm = EntityManager.FromDataBaseService("DataAccessAdventureWorks");
            //dm.LoadEntities<ProductCategory>();
            dm.LoadAssociated<ProductSubcategory, ProductSubcategoryProductCategory>();
            return dm.Data;
        }

L’API LoadAssociated nous permet de charger toutes les Associations entre ProductSubCategory et ProductCategory, en précisant la relation concernée; je pourrais avoir plusieurs relations entre mes entités, et nous devons préciser quelle relation nous voulons utiliser pour la jointure.

Si nous compilons notre solution et relançons l’application, nous constatons que les noeuds fils sont bien chargés cette fois-ci.

image 

Mais ce n’est pas tout à fait ce que nous souhaitons, car les données sont chargées d’un seul coup, et nous voulons avoir un lazy loading, c’est à dire charger les données au fur et à mesure de l'ouverture des noeuds.

Nous allons donc ajouter une 2ème commande, qui charge les SubCategories associées à une Category donnée par son Id:

Dans Visual Studio, ajoutons une 2ème Commande à notre Interface.

Cette Commande a un paramètre productCategoryID.
image
Le code de la Commande charge les SubCategory associé à la Category dont l’ID est passé en paramètre.

Compilez la solution, pour que cette commande soit disponible dans BindingStudio.
DataSet IADWService.LoadSubCategories(int productCategoryId)
{
     IDataManager dm = EntityManager.FromDataBaseService("DataAccessAdventureWorks");
     dm.LoadAssociated<ProductSubcategory, ProductSubcategoryProductCategory>(productCategoryId);
     return dm.Data;
}
Dans BindingStudio, nous allons binder cette nouvelle Commande sur l’évènement OnFirstExpand du noeud ProductCategory. image 
Bindons notre Commande.

Le Result est mergé dans le DataSet ADWData.
image
Le paramètre est bindé sur les données de l’arbre, le noeud Current.

Sauvons notre Application.
image

 

 

 

Si nous relançons l’application, nous constatons que notre arbre est bien rempli, comme précédemment. Par contre, d’un point de vue des échanges avec le Serveur, c’est complètement différent, puisqu’un aller et retour se produit, la première fois que nous ouvrons un noeud ProductCategory.

Nous avons réaliser un arbre en lazy loading, en quelques clics de souris, et sans ajouter le moindre code technique.

La suite, au prochain épisode.

Classé sous : , , ,

Commentaires

Pour ajouter un commentaire, vous devez d'abord vous identifier ici
# Les news d'Aspectize said on August 27, 2010 06:26 AM:

La vidéo du tutorial &#160; Configuration des Vues Commençons par créer la première Vue de notre Application