Sélection d'éléments venant d'une base de données, via comboBox [Résolu]

S1rK 17 Messages postés mardi 25 juillet 2006Date d'inscription 15 novembre 2011 Dernière intervention - 9 mars 2010 à 10:55 - Dernière réponse : imothepe_33 168 Messages postés mardi 27 juillet 2004Date d'inscription 28 novembre 2012 Dernière intervention
- 9 mars 2010 à 19:11
Bonjour à tous,

Voila je travail actuellement sur un PDA Industriel et une base de données très simple, comportant une table "Produit" et une table "Stock" avec l'utilisation d'ID pour les deux.

Mon objectif est le suivant: Je souhaite afficher ma table "Produit" dans une comboBox(jusque là, tout va bien), et a partir de celle-ci, lorsque je sélectionne l'un des produits, je souhaite que le stock correspondant s'affiche (dans une textBox par exemple) pour le produit en question.

private void button1_Click(object sender, EventArgs e)
        {
            SqlCeConnection myConnection;
            myConnection = new SqlCeConnection("Data Source=blablabla");
            myConnection.Open();

            /* Efface le contenu de notre comboBox */
            comboBox1.Items.Clear();

            try
            {
                SqlCeCommand myCommand = new SqlCeCommand("SELECT Nom FROM Produit", myConnection);
                SqlCeDataReader Reader = myCommand.ExecuteReader();

                while (Reader.Read())
                {
                    comboBox1.Items.Add(Reader[1].ToString());
                }

                Reader.Close();

                MessageBox.Show("Listing fini", "OK");
            }

            catch (SqlCeException exp)
            {
                MessageBox.Show(exp.Message);
            }

            finally
            {
                myConnection.Close();
            }
        }


Pour l'affichage de ma table "Produit" dans ma comboBox, pas de soucie, là où je bloque, et voila ma question: Comment sélectionner un produit(venant de ma table "Produit") de ma comboBox, et lui indiquer via une textBox le nombre de Stock pour celui-ci(provenant de la seconde table "stock"). Ce n'est peut être pas la bonne méthode ici, peut-être est-il préférable d'utiliser les ID dans la comboBox au lieu des Produits? Si vous avez des idées, je suis preneur =)

Voila j'espère avoir été clair ^^ d'avance merci pour votre aide =)
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
imothepe_33 168 Messages postés mardi 27 juillet 2004Date d'inscription 28 novembre 2012 Dernière intervention - 9 mars 2010 à 19:06
3
Merci
Si je comprends bien, tu as une relation Maître/Esclave entre tes tables Produit et Stock. Donc la table Produit envoie sa clé primaire dans la table Stock, cela veut dire que tu devras faire une requête SELECT sur la table Stock en précisant l'ID du produit dont tu veux récupérer la quantité en stock.
Tout d'abord, tu dois au niveau de ton combobox être en mesure de récupérer l'id de ton produit mais ton code ne te permet pas de le faire. Pour initialiser ton combobox, il te faut à la fois afficher le NOM du produit et récupérer l'ID du produit. Pour ce faire, ta requête dois renvoyer l'Id et le Nom du produit. Comment le récupérer? Tu as deux options soit tu utlises un DataTable ou un BusinessObject, qui tous les sont une représention des champs de ta table produit. Pour ma part, je préfère les BusinessObject. Les modifications que tu dois apporter à ton code sont les suivantes:

1/ Créer un BusinessObject pour la table Produit(Ceci n'est qu'un exemple)

public class ProduitBO
{
   private int id;
   
   public int Id
   {
      get { return id;}
      set { id = value;}
   }

   private string nomProduit;

   public string NomProduit
   {
      get { return nomProduit;}
      set { nomProduit = value;}
   }

   public ProduitBO()
   {}   
}


2/ Modifications de ton code

private void button1_Click(object sender, EventArgs e)
{
SqlCeConnection myConnection;
myConnection = new SqlCeConnection("Data Source=blablabla");
myConnection.Open();

/* Efface le contenu de notre comboBox */
comboBox1.Items.Clear();

//Tu créés une liste générique
List liste = new List();

try
{
SqlCeCommand myCommand = new SqlCeCommand("SELECT * FROM Produit", myConnection);
SqlCeDataReader Reader = myCommand.ExecuteReader();

while (Reader.Read())
{
ProduitBO p = new ProduitBO();

p.Id = (int)Reader["NomDuChampIDProduit"];
p.NomProduit = Reader["NomDuChampNomProduit"].ToString();

//Ici tu rempli ta liste des objets que tu récupères
liste.Add(p);
}

Reader.Close();

//Ici tu remplis ton combobox
//tu indiques la valeur à récupérer (Nom de la propriété dans le BusinessObject)
comboBox1.ValueMember = "Id";

// tu indiques la valeur à afficher (Nom de la propriété dans le BusinessObject)
comboBox1.displayMember = "NomProduit";

comboBox1.DataSource = liste;

MessageBox.Show("Listing fini", "OK");
}

catch (SqlCeException exp)
{
MessageBox.Show(exp.Message);
}

finally
{
myConnection.Close();
}
}

3/ Comment récupérer l'Id de ton produit?

A toi de voir l'évènement du combobox qui te convient pour récupérer l'id; tu écris

//Tu récupères l'id du produit dans la variable id 
int id = comboBox1.SelectedValue


Une fois ceci fais, tu passes en paramètre la variable id à ta requête SELECT sur la table stock.

Merci pour ta compréhension.

Only the strong survive !

Merci imothepe_33 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de imothepe_33
imothepe_33 168 Messages postés mardi 27 juillet 2004Date d'inscription 28 novembre 2012 Dernière intervention - 9 mars 2010 à 19:11
0
Merci
Ton code en question...

private void button1_Click(object sender, EventArgs e)
{
   SqlCeConnection myConnection;
   myConnection = new SqlCeConnection("Data Source=blablabla");
   myConnection.Open();

   /* Efface le contenu de notre comboBox */
   comboBox1.Items.Clear();

   //Tu créés une liste générique
   List liste = new List();

   try
   {
     SqlCeCommand myCommand = new SqlCeCommand("SELECT * FROM Produit", myConnection);
     SqlCeDataReader Reader = myCommand.ExecuteReader();

     while (Reader.Read())
     {
       ProduitBO p = new ProduitBO();

       p.Id = (int)Reader["NomDuChampIDProduit"];
       p.NomProduit = Reader["NomDuChampNomProduit"].ToString();

       //Ici tu rempli ta liste des objets que tu récupères
       liste.Add(p);
     }

     Reader.Close();

    //Ici tu remplis ton combobox
    //tu indiques la valeur à récupérer (Nom de la propriété dans le BusinessObject)
    comboBox1.ValueMember = "Id";

    // tu indiques la valeur à afficher (Nom de la propriété dans le BusinessObject)
    comboBox1.displayMember = "NomProduit";

    comboBox1.DataSource = liste;

    MessageBox.Show("Listing fini", "OK");
   }
   catch (SqlCeException exp)
   {
     MessageBox.Show(exp.Message);
   }

   finally
   {
     myConnection.Close();
   }
} 


Only the strong survive !
Commenter la réponse de imothepe_33

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.