-
1 pièce(s) jointe(s)
Matrice WPF + Binding
Bonjour,
Je voudrais créer une matrice afin d'afficher un système de droit.
Je voudrais donc afficher une liste de personnes et une liste de fonctions.
Le croisement entre les 2 me permettrait d'afficher une combobox pour définir si oui ou non il a le droit.
Graphiquement parlant ça donnerait quelque chose de ce style :
Pièce jointe 182551
Plusieurs points :
Comment réaliser ceci en XAML ?
Respecter le MVVM ...
A savoir donc que les lignes représentent la table fonctions et les colonnes la table Groupe.
L'intersection représente la table FonctionGroupe qui se compose de IDGroupe, IDFonction. Cette table n'est remplie que si la personne a le droit d'utilisé la fonction . (Simplification de ma part car sinon j'ai 2 booléen un écriture et 1 lecture)
Si la personne n'a pas de droit d'utiliser la fonction alors je n'ai aucun enregistrement pour ce couple fonction/personne ; à ce moment la checkbox apparaît mais vide. (Cela me permet d'éviter de surcharger la table avec des lignes inutiles)
Si la personne 1 n'a pas de droit sur la fonction 1 alors la ligne 1,1 n'existe pas dans ma BDD
On supprime l'enregistrement lorsque l'on décoche et créer lorsqu'on coche.
-
Bonjour,
Je ne sais pas si c'est la bonne méthode mais tu pourrais faire un datatemplate dans ton conteneur où tu déclare tes checkbox dont la valeur est bindée sur une propriété de tes objets.
Grosso modo, tu passe une liste de fonction en paramétre a ton conteneur. On va dire qu'une fonction a une propriété booléenne pour chaque groupe. Ces booléens représentent les droits de tes groupes pour cette fonction.
Ensuite dans ton conteneur tu définis un datatemplate où tu définis ce qui sera affiché pour chaque objet : à savoir tes checkbox. Enfin tu bind tes checkbox sur la propriété booléenne qui correspond.
Je pense qu'il y'a plus propre, mais normalement ça marche. Et il ne devrait pas y'avoir de problème avec ton MVVM.
-
2 pièce(s) jointe(s)
Le problème et que je vais avoir des cas avec la valeur null...
(Je voudrais éviter de surcharger la table avec des valeurs false qui au final ne seront pas vraiment utilisées.)
Le truc c'est que je veux garder l'idée du tableau à 2 dimensions et donc afficher la checkbox même pour les valeurs non définis.
Ma Bdd ressemble à ça :
Functions ( idFunction, Name )
Persons ( idPerson, Firstname, Birthday )
Right ( #idPerson, #idFunction )
Tu pensais à quelque chose comme ça ?
Pièce jointe 182608
Je peux effectivement lister les groupes par fonction, mais dès lors qu'une fonction à moins de groupe qu'une autre alors la checkbox n'apparait plus car ne fait plus partie de la liste.
Le résultat serait de ce style non ?
Pièce jointe 182610
Edit :
Il faut savoir que les groupes et les fonctions changent, c'est complètement dynamique
-
Le problème avec le binding, c'est qu'il te crée autant d'objet que tu lui en passe dans la liste, donc si une fonction contient 3 groupes d'ayant droit, tu vas avoir 3 checkbox cochées mais aucune de décochées. Pour les avoir quand même d'affichés il faudrait que tu crée des objets ayant comme droit false.
Tu peux par exemple au moment d'appeler ta vue et de lui passer ta liste d'objet créer tous les objets false correspondants.
-
Il faudrait donc que je fasse un nouvel objet qui contiendrait la fonction et le groupe ainsi qu'un booléen.
Lors du chargement j'initialise les valeurs de ce booléen avec ce que j'ai en BDD.
Et donc lorsque je change le booléen je créer/supprime un objet via le setter...
Sa me fait créer une classe de plus.
Je sais pas si j'ai bien compris ce que tu voulais me dire.
-
C'est ça grosso modo, tu pourrais créer tous les objets FonctionGroupe possible en initialisant les droits à false, puis tu parcours ta liste d'objet en base et tu modifier les droits a true pour les objets qui correspondent. De cette manière tu te retrouve avec une liste de tous tes objets FonctionGroupe avec les droits actuels mais seulement coté programme et non coté BDD. Ça devrait coller parfaitement au binding pour tes checkbox.
-
ok, merci pour les infos.
Je vais essayer de créer un sample et de le poster pour d'autres personnes.
Je mettrai le marqueur résolu dès le sample posté.
J'ai trouvé ceci : http://www.codeproject.com/Articles/...taGrid-Control.
Ce qui fait exactement ce que je veux mais alors jpige absolument pas tout.