Bonjour,
J'ai un petit problème avec l'utilisation des Expression dans les DataColumn.
Voilà, j'ai utilisé les assistants pour créer rapidement une connexion et un DataSet sur la base Access Northwind.
Dans mon DataSet je prends les tables Produit et Catégorie liées par une relation "CategoriesProducts".
J'ajoute à la DataTable "Categories" une colonne "ProductCount" destinée à afficher le nombre de produits dans la catégorie.
Je place donc dans la propriété Expression l'expression suivante : Count(Child(CategoriesProducts).ProductID).
Les deux DataTables sont alimentés avec un select * sur les tables de la base.
Le hic c'est que, quand je filtre les enregistrement de la DataTable Produits le Count ne change jamais dans catégorie.
J'ai filtré par tous les moyens que j'ai trouvé, c'est à dire via le BindingSource, via un DataView, un DataViewManager mais rien n'y fait la valeur de bouge jamais, elle n'est pas recalculée, sauf si ont touche aux lignes du DataTable "Products". Par exemple si je supprime une ligne, le ProductCount de la catégorie correspondante et bien recalculé.
Sauf que moi je ne veut pas toucher aux lignes du DataTable, je veux simplement le "filter".
Par exemple : J'ai relié mon ProductBindingSource et CategorieBindingSource à un DataViewManager au lieu de les relier directement au DataSet.
J'ai filtré les enregistrement de la table product via le DataViewManger avec ceci :
Et bien rien n'y fait le ProductCount ne tient pas compte du filtre appliqué à Products, pourtant j'ai moins de produits dans chaque catégorie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part dtvmComptoir.DataViewSettings("Products").RowFilter = "SupplierID = 1"
Et je prends aussi les catégories dans le DataViewManager et non pas dans le DataSet.
J'ai l'impression que la valeur du ProductCount est calculée lors du remplissage du DataSet (qui est fait avec des Select *) et qu'ensuite la valeur n'est plus mise à jour... sauf en cas d'ajout / suppression de ligne dans la DataTable Product.
La seule solution pour faire bouger le Count serait donc de refaire le Select de la table products en incluant le filtre à la requête SQL.
Sinon on pourrait avoir deux DataSet, un complet et un alimenté avec des extractions faites sur le premier... mais c'est vraiment laid.
je me trompe ?
Cordialement
Mael
Partager