2009-03-23 7 views
0

Ceci est probablement une question étrange mais ici je vais (laissez-moi savoir si c'est une mauvaise conception de base de données ou juste une situation étrange que je suis).Contrôles de liaison à plusieurs DataTable

J'ai deux tables dans ma base de données: ProductGroup and Parameters. L'un contient des informations sur divers groupes de produits selon son nom et l'autre contient des informations sur divers paramètres qui peuvent être appliqués à chaque groupe (et ainsi rendre chaque groupe différent). Pour lier les deux tables, une troisième table est créée: GroupParameters avec deux clés primaires: parameterId et groupId et la troisième colonne étant la valeur du paramètre pour ce groupe.

Maintenant, j'ai un écran qui affiche des informations sur chaque groupe et ses valeurs de paramètres. Les utilisateurs devraient pouvoir éditer ces valeurs également. Donc ma question est de savoir comment lier cette valeur (stockée dans la troisième table) à une zone de texte. Et en général comment pourrais-je lier un contrôle dans cette situation.

Merci les gars!

EDIT: Il y a un détail important que j'ai omis. Je souhaite utiliser DataSet et DataTable objets pour stocker les données en mémoire à partir de la base de données et également les lier aux contrôles. La raison de cela est sans rapport avec le problème, mais il doit le faire avec moi d'avoir à suivre les changements et être en mesure de les annuler aux utilisateurs sera :(

+0

Je pense qu'il y a une faute de frappe mineure, mais potentiellement confuse dans ce message. Je * pense * que l'affiche signifiait: "J'ai deux tables dans ma base de données: ProductGroup and Parameters". –

+0

Le nom de la table n'est pas pertinent. Vous pouvez l'appeler Parameters ou GroupParameters, la table contient ID, Name et Description pour les paramètres qui peuvent être appliqués à un groupe (décrit dans la table ProductGroup). – Alexandra

+0

Vous ne pouvez pas l'appeler GroupParameters parce que c'est le nom de la troisième table (qui concerne les deux premiers);) Juste un petit point de clarification pour les personnes qui essaient de répondre à la question. –

Répondre

0

En fait, la meilleure chose qui a fonctionné pour moi était d'utiliser MultiBinding. Je n'étais pas au courant de cela - il est difficile d'apprendre par soi-même à travers les requêtes de recherche Google (même si apprendre avec un livre serait lent).

0

Je ne vois pas de conception vraiment mal ici.

Vous pouvez créer l'interface utilisateur pour cela comme une liste de groupes de produits que l'utilisateur doit choisir (ListBox lié à la collection ProductGroups), puis vous pouvez avoir un contrôle utilisateur avec une ListBox, une propriété nommée CurrentGroupId et quelques boutons de contrôle (ex. OK "). Lier CurrentGroupId à la valeur sélectionnée de ProductGroups ListBox Lorsque CurrentGroupId change ou que la collection Parameters change, vous devez filtrer ces éléments internes de ListBox à l'aide de LINQ ou autre - fondamentalement, remplissez ListBox avec GroupParameter-s où CurrentGroupId correspond à ProductGroupId sélectionné. être GroupParam objets de sers-s.

maintenant (enfin :)) la réponse à votre question: vous pouvez les éléments de la liste-modèle de données pour avoir une zone de texte, lié à la propriété de valeur comme celui-ci (ici « local » est votre espace de noms):

<DataTemplate DataType={x:Type local:GroupParameter}> 
    <StackPanel Orientation="Horizontal"> 
    <TextBox Text="{Binding Value, Mode=TwoWay}" /> 
    <Button Content="OK" Click=INSERT_YOUR_OK_HANDLER_HERE /> 
    <Button Content="Cancel" Click=INSERT_YOUR_CANCEL_HANDLER_HERE /> 
    </StackPanel> 
</DataTemplate> 

Si vous devez donner à l'utilisateur la possibilité d'ajouter de nouveaux paramètres, vous pouvez créer une fonctionnalité Add qui ajoutera une nouvelle entrée dans la collection Parameters avec l'ID de groupe actuellement sélectionné. L'utilisateur peut alors modifier l'élément ajouté dans votre contrôle utilisateur.

J'espère que ça aide, et s'il est difficile de comprendre ce que je viens de dire, je pourrais écrire la plupart de ce code, je suppose. Ne hésitez pas à me demander de :)

Questions connexes