IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[C#] Récupérer valeur de checkBox et DropDownList dans GridView


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut [C#] Récupérer valeur de checkBox et DropDownList dans GridView
    Bonjour à tous,

    Voila, après des heures de recherche, je ne trouve pas la réponse a mon problème.

    Je vous explique :

    J'ai plusieurs tables dans ma base de données ( client, commande, lignesCommande,produit)

    Je suis entrain de développer l'ajout d'une commande.
    Pour ce faire il faut qu'a chaque commande corresponde des lignes de commandes.
    Ces lignes de commande corresponde aux produit qui seront ajouter a cette commande.

    Donc pour résumé pour l'ajout de ma commande : il faut que je sélectionne le client qui commande, les produits a ajouter a la commande.

    J'ai donc mis dans un gridView l'ensemble de mes produits.
    Avec une colonne CheckBox ( pour sélectionner le ou les produits a ajouter ) et un dropDownList pour récupéré la quantité a ajouter.

    Voici la liste des produits :


    Comment doit je faire pour qu'a chaque case cocher et chaque quantité sélectionné j'ajoute ces produit a la table ligne de commande ( grâce a l'idprod ) sachant bien évidement qu'il peut y avoir plusieurs produit par commande.

    Voici le code de mon gridView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <asp:GridView ID="GridViewProduitFourni" DataSource='<%# ListProdFourni() %>' AutoGenerateColumns="false"
                    runat="server" OnPageIndexChanging="GridViewProduitFourni_PageIndexChanging">
                    <Columns>
                        <asp:TemplateField HeaderText="Ajouter le produit">
                            <ItemTemplate>
                                <asp:CheckBox ID="CheckBoxAjoutProdFourn" runat="server" />
                            </ItemTemplate>
                        </asp:TemplateField>
                         <asp:TemplateField HeaderText="Quantité">
                            <ItemTemplate>
                                <asp:DropDownList ID="dropDownQteProdFourni" DataSource='<%# nbProd() %>' runat="server"></asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="idprod" HeaderText="Référence" ReadOnly="true" />
                        <asp:BoundField DataField="nom" HeaderText="Désignation" ReadOnly="true" />
                        <asp:BoundField DataField="prixVente" HeaderText="Prix Vente" ReadOnly="true" />
                    </Columns>
                </asp:GridView>
    Un grand merci a vous, c'est un projet d’examen et je le passe dans quelque jours.
    Life myLife = new Life ("eat","sleep","code");

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Bonjour,

    Finalement après des heures de recherche j'ai enfin trouver la solution.
    Grâce a internet ? non.
    Grâce a mon bon vieux bouquin ? oui

    Certe je pense que mon code pourrai être optimiser mais disons que ça marche et plutôt bien.

    Je pense qu'en développement de gestion ce cas reste relativement typique ( gestion des commandes ) je vais donc données mon code en espérant que cela puisse servir.

    Explication du code :

    Dans l’évènement click de mon bouton AjouterCommande :

    1. Je parcours l'ensemble de mon gridView a l'aide d'un foreach
    2. je créer une variable de controle de type DropDownList
    3. je créer également une variable booleen pour stocker l'état du checkbox
    4. Je créer une condition IF s'exécutant si l’état du checkbox est true
    5. je récupère l'id de mon produit dans un champs cacher
    6. je parse l'item sélectionné de mon DDL et le stocke dans une variable INT
    7. Je créer une nouvelle instance de ma classe commande
    8. Si la ligne du girdView est a l'index 0 (donc premier passage de la boucle )j'utilise ma fonction ajouterCommande avec les paramètre nécessaire.
    9. je boucle sur l'ensemble de mes commandes pour recupérer l'id le plus haut ( c'est la je pense que le code pourrai être optimiser )
    10. et j'ajoute cette idcommande et l' idprod a la table ligne commande
    11. la boucle continu ces passage :
    12. si lindex de la ligne est différent de 0 alors je n'ajoute pas de nouvelle commande
    13. en revanche j'ajoute une nouvelle lignes avec l'idcom qui lui n'a pas bougé et un nouveau idprod correspond au deuxième checkbox sélectionné
    14. ainsi de suite jusqu’à que le if rencontre une valeur false.


    Voici le code c# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    public void buttonAjouter_click(Object sender, EventArgs e)
        {
            int idprodFind = 0;
            int quantite = 0;
            foreach (GridViewRow row in GridViewProduitFourni.Rows) // parcour l'ensemble de mon gridView
            {
                DropDownList dp1 = ((DropDownList)row.FindControl("dropDownQteProdFourni")); //declaration du dropDownListQte
                bool ischecked = ((CheckBox)row.FindControl("CheckBoxAjoutProdFourn")).Checked; //declaration d'un booleen conservant l'etat du chekbox ( cocher - decocher)
                if (ischecked) //si le checkbox est true donc cocher faire le traitement suivant 
                {
                    idprodFind = int.Parse(((HiddenField)row.FindControl("idprodHidden")).Value);//création d'un champs cacher pour recuperé l'idprod
                    quantite = int.Parse(dp1.SelectedItem.ToString());
     
                    int nbrProd = int.Parse(dp1.SelectedValue.ToString());
                    int idclient = int.Parse(this.textBoxNumCli.Text);
     
                    LibrairieClassTraiteur.Commande newcom = new LibrairieClassTraiteur.Commande(idclient, this.calendarDateCom.SelectedDate, "préparation");
                    //si l'index de la ligne est 0 alors ajouter une nouvelle commande et une ligne de commande 
                    if (row.RowIndex == 0)
                    {
                        Gestion.AjoutCommande(newcom);
     
                        int maxidcom = 0;
                        foreach (LibrairieClassTraiteur.Commande DataCom in Gestion.ListerCommande(0, "idcom", "idcom"))
                        {
                            maxidcom = DataCom.idcom;
                        }
     
                        LibrairieClassTraiteur.Ligne newLigne = new LibrairieClassTraiteur.Ligne(maxidcom, idprodFind, nbrProd);
     
                        Gestion.AjoutLigne(newLigne);
                    }
                    else // si index de la ligne est != 0 alors ne pas ajouter de nouvelle commande mais ajouter une ligne de commande
                        // en conservant pour chaque ligne suivante l'idcom correspondant a la 1ere commande ajouter
                    {
                        int maxidcom = 0;
                        foreach (LibrairieClassTraiteur.Commande DataCom in Gestion.ListerCommande(0, "idcom", "idcom"))
                        {
                            maxidcom = DataCom.idcom;
                        }
     
                        LibrairieClassTraiteur.Ligne newLigne = new LibrairieClassTraiteur.Ligne(maxidcom, idprodFind, nbrProd);
     
                        Gestion.AjoutLigne(newLigne);
                    }
     
     
                }
     
            }
        }
    Voila merci de m'avoir lu.
    Life myLife = new Life ("eat","sleep","code");

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Après une analyse de mon code et une petite réflexion, voici une légère optimisation du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public void buttonAjouter_click(Object sender, EventArgs e)
        {
            int idprodFind = 0;
            int quantite = 0;
            int idclient = int.Parse(this.textBoxNumCli.Text);
            LibrairieClassTraiteur.Commande newcom = new LibrairieClassTraiteur.Commande(idclient, this.calendarDateCom.SelectedDate, "préparation");
            Gestion.AjoutCommande(newcom);
     
            int maxidcom = 0;
                 maxidcom = Gestion.ListerAvecRequete("SELECT MAX(idcom) FROM commande");
     
            foreach (GridViewRow row in GridViewProduitFourni.Rows) // parcour l'ensemble de mon gridView
            {
                DropDownList dp1 = ((DropDownList)row.FindControl("dropDownQteProdFourni")); //declaration du dropDownListQte
                bool ischecked = ((CheckBox)row.FindControl("CheckBoxAjoutProdFourn")).Checked; //declaration d'un booleen conservant l'etat du chekbox ( cocher - decocher)
                if (ischecked) //si le checkbox est true donc cocher faire le traitement suivant 
                {
                    idprodFind = int.Parse(((HiddenField)row.FindControl("idprodHidden")).Value);//création d'un champs cacher pour recuperé l'idprod
                    quantite = int.Parse(dp1.SelectedItem.ToString());
     
                    int nbrProd = int.Parse(dp1.SelectedValue.ToString());               
                    LibrairieClassTraiteur.Ligne newLigne = new LibrairieClassTraiteur.Ligne(maxidcom, idprodFind, nbrProd);
                    Gestion.AjoutLigne(newLigne);                    
                }
            }
    }
    Pour éviter de faire le test si index de la ligne est différent de 0, il suffit tous simplement de sortir l'ajout de la commande du foreach.

    De plus pour éviter le parcoure de l'ensemble de mes commandes, j'ai créer une fonction qui utilise une requête SQL retournant une seul valeur a savoir le MAX idcom de ma table commande.

    PS : j'ai honte de mon premier code
    Life myLife = new Life ("eat","sleep","code");

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer la valeur des dropdownlists dans GridView
    Par dcarroz dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/01/2010, 12h32
  2. [XL-2003] Récupérer valeur de ligne selon recherche dans tableau
    Par Lufia dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/11/2009, 14h02
  3. Réponses: 1
    Dernier message: 13/08/2009, 14h58
  4. Réponses: 1
    Dernier message: 31/07/2009, 01h44
  5. Réponses: 3
    Dernier message: 28/09/2007, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo