thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
11 mars 2007 à 19:51
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
13 mars 2007 à 16:07
Bonjour à tous,
J'ai un soucis avec le chargement d'une combo, je vous explique :
J'ai une classe ArticleEntity composé des attributs Code, Nom et Famille,....
J'ai un formulaire pour modifié un article avec :
Un BindingSource nommé articleEntityBindingSource pour mon article avec la propriétés suivante :
DataSource : ArticleEntity
un textbox Code, un autre pour le Nom et une ComboBox pour la liste des familles.
J'ai placé un autre bindingsource nommé familleBindingSource sur mon formulaire avec comme propriété :
DataSource : FamilleEntity (Nom de la classe des familles)
Ma Combo à les propriétés suivantes :
DataSource : familleBindingSource
DisplayMember : FamilleProduitNom (Attribut Nom de la classe FamilleEntity)
ValueMember : CodeFamille (Attribut Code de la classe FamilleEntity)
DataBindings.SelectedValue : articleEntityBindingSource - CodeFamilleProduit
DataBindings.Text : familleProduitEntityBindingSource - FamilleProduitNom
Dans l'événement Load de ma form, voilà le code que j'ai écrit :
FamilleproduitDAO daoFamille = new FamilleproduitDAO();
FamilleproduitEntityCollection collectionFamille = new FamilleproduitEntityCollection(daoFamille.SelectFamilles());
familleProduitEntityBindingSource.DataSource = collectionFamille;
Ma combo se charge bien avec toutes le familles possibles mais se positionne sur le premier élément de ma liste et non pas sur la valeur réel de mon article.
En espérant avoir été assez clair.
J'ai vraiment besoin de votre car je ne sais plus quoi faire.
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 12 mars 2007 à 16:28
Il s'agit des propriétés DataBindings.SelectedValue et Text de ma combo.
Ces deux lignes ne sont pas du code, elles représentent ce que j'ai mis dans les propriétés avec le designer :
Dans la propriété DataBindings.SelectedValue, j'ai mis l'attribut CodeFamilleProduit de ma source de donnée articleEntityBindingSource pour justement afficher la valeur de la zone famille de mon article.
Dans la propriété DataBindings.Text, j'ai mis l'attribut FamilleProduitNom de ma source de données familleProduitEntityBindingSource mais j'étais pas très sûr de moi.
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 12 mars 2007 à 16:55
Je ne vois pas de propriété DataBindings.SelectedValue et DataBindings.Text pour une combebox.Seulement des propriétés SelectedValue et Text. Si tu utilise SelectedValue directement, ça ne marche pas ?
Sinon, un autre truc que je comprends pas trop : familleProduitEntityBindingSource et familleBindingSource , c'est la même chose ?
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 12 mars 2007 à 17:11
Sur le designer, tu te positionnes sur ta combo tu as une propriété Databindings, tu cliques sur le + pour déployer de nouvlles propriétés dont SelectedValue et Text.
Tu as raison, je me suis mélangé les pinceaux mais familleProduitEntityBindingSource et familleBindingSource sont un seul et même objet.
Je suis passer par le designer pour placer mes bindingsource sur ma form et les propriétés de ma combo. Je veux bien essayer de tout faire par code mais je ne sais pas comment...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 12 mars 2007 à 22:31
Le problème c'est que je ne vois pas trop à quoi est relié articleEntityBindingSource. Mais tu dois avoir un article "courant". Appelons-le "MonArticle".
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 12 mars 2007 à 23:25
Par contre ce que je ne sais pas faire et que j'aimerais bien savoir faire est créer une relation entre 2 listes d'objets :
En reprenant ton exemple, on aurait 2 combobox dans notre forme. La première afficherait la liste des familles de produit, la deuxième afficherait la liste des articles qui font partie de la famille sélectionnée dans le combobox 1.
Ca ce fait facilement avec des tables d'un dataset, mais je me demande si ça se fait avec des listes d'objets. Si quelqu'un sait ça, ça m'intéresse beaucoup.
Mathmax
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 13 mars 2007 à 07:49
Ca ne marche pas MaCombo.SelectedValue = MonArticle.CodeFamilleProduit, en fait ça équivaut à ce que j'ai fait en mettant dans la propriété SelectedValue de ma combo : articleEntityBindingSource - CodeFamilleProduit
Pour la relation, j'ai bien sur créer une relation dans mon SGBD et pour mes classes, voilà ce que j'ai fait
public class ArticleEntity : ProduitEntity
{
...
private FamilleproduitEntity _CodeSousFamilleProduit = null;
...
}
De plus, j'ai une couche d'accès aux données avec Nhibernate, j'ai donc également créé ma relation dans mon fichier de configuration
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 13 mars 2007 à 15:09
en fait ça équivaut à ce que j'ai fait en mettant dans la propriété
SelectedValue de ma combo : articleEntityBindingSource -
CodeFamilleProduit
Non, tu le mettais dans SelectedValue du BindingSource du Combo et non dans le SelectedValue du combo.
Pour la relation, j'ai bien sur créer une relation dans mon SGBD
Je parlais d'une relation entre les table d'un dataset. Mais visiblement tu n'en utulise pas, tu charge directement tes données dans des listes de classes. Si tu charge tes données dans des DataTable, tu n'aura pas de problème pour les mettre en relation. Par contre avec des listes d'objets, je me demande si il est possible de le mettre en relation...
Sinon je ne suis pas sûr d'avoir parfaitement saisi ton problème. Voici le code que je te propose. 2 combobox dans une form (cmbFamilles et cmbProduits). Quand tu séléctionne une famille de produits, tu séléctionne le premier élément de cmbProduits dont la famille de produit a cette valeur.
private List<FamilleDeProduit> famillesDeProduit;
private List Produits;
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 13 mars 2007 à 16:07
Merci pour toutes réponses.
Je vais essayer ce soir mais comme tu l'as dis, je pense que cette solution n'est pas satisfaisante.
Je ne parle pas de DataSet, quand j'ai dit "Pour la relation, j'ai bien sur créer une relation dans mon SGBD", je parlait de réellement d'une relation (clé étrangère) dans ma base de données MySql
Je ne voulais pas passer par les DataSet car je ne sais pas trop m'en servir. J'ai essayé mais le DataSet que j'ai créé (par l'assistant) est l'image de la base de données avec des DataTable, DataRow. On perd donc la notion d'objet métier (ceux que j'ai appelé Article, FamilleArticle).