none
Difficultés avec sqldatareader RRS feed

  • Question

  • bonjour à tous,

    depuis quelques jours que j'essaye de remplir un gridview à l'aide d'un sqldatareader, mais je n'y arrive pas vraiment...

    il s'agit d'une requete qui rappatrie un produit à partir de la base de donnée et remplir des champs de texte, chose que j'arrive à faire sans problèmes, mais je veux que la meme requete me rapatrie les clients ayant acheté ce produit et les mettres dans un grid view, dans certains cas un produit peut etre acheté par plusieurs client (associés)...

    lors de l'exécution les informations produits sont rappatriées, mais pour les clients j'ai toujours un seul client qui est rappatrié meme s'il y'en a plusieurs ...

    voici le code que je suis etrain d'exécuter

     protected void Cmb_Produit_SelectedIndexChanged(object sender, EventArgs e)
        {
            ClsConnexion ConnDb = new ClsConnexion();
            string Req = @"SELECT * from vue1";
            SqlDataReader Rst = ConnDb.RstMethodeReader(Req);
            
            if (Rst.HasRows==false) {
                MessageBox.Show("Pas d'enregistrement");           
            }
            else
            {
               
                Rst.Read();
                Lbl_Nature.Text = Rst["Nature"].ToString();
                Lbl_Etage.Text = Rst["etage"].ToString();
                Lbl_GH.Text = Rst["gh"].ToString();
                Lbl_Societe.Text = Rst["Soc"].ToString();
                Txt_Avance.Text = Rst["avance"].ToString();
                Txt_Prix.Text = Rst["prix_vente"].ToString();
             Date_Reservation.Text = Rst["date_reservation"].ToString();
                Date_Limite.Text  = Rst["date_limite"].ToString();
                Cmb_Vendeur.SelectedItem.Text = Rst["vendeur"].ToString();
                Cmb_Initie.SelectedItem.Text = Rst["suivi"].ToString();
            DataTable dt = new DataTable();
           
            dt.Columns.Add("id");
            dt.Columns.Add("part");
            dt.Columns.Add("Client");
            DataRow dr = dt.NewRow();
            dr["id"] = Rst["id"];
            dr["part"] = Rst["part"];
            dr["Client"] = Rst["Client"];
            dt.Rows.Add(dr);
     
            Grid_Clients.DataSource = dt;
            Grid_Clients.DataBind();
            dt.Clear();
            }
        }
    Merci d'Avance pour vos suggestions
    jeudi 17 mai 2012 14:47

Réponses

  • Bonjour,

    Ce code récupère la première ligne de "vue1" (on ne peut pas choisir le produit récupéré ?) et crée une seule ligne dans dt avant de l'afficher donc on récupère juste un produit et un client...

    Difficile de dire quoi faire sans savoir comment la base est conçue mais on devrait sans doute avoir :
    1) une requête qui récupére les infos du produit choisi
    2) une deuxième requête qui récupère les infos des clients dont une commande contient ce produit, classiquement qq chose comme :

    SELECT * FROM Clients WHERE ClientId IN (SELECT ClientID FROM Commande WHERE CommandeID IN (SELECT CommandeID FROM DétailsCommande WHERE ProduitId=Valeur))

    Souvent on a des lignes de commandes (une ligne par produit commandé), on prend donc les lignes qui correspondent au produit voulu, les n° de commandes qui correspondent et les clients qui ont passés ces commandes (vous pouvez utiliser JOIN si vous connaissez)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    samedi 19 mai 2012 20:50
    Modérateur