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

C# Discussion :

Evenement click sur un bouton et affichage de ses données


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 44
    Points : 30
    Points
    30
    Par défaut Evenement click sur un bouton et affichage de ses données
    Bonjour à tous,
    Etant donné que je débute en développement avec le C# je rencontre quelques problèmes dans mon application.
    Je m'explique j'ai des boutons que je les crée statiquement mais j'affecte leurs textes dynamiquement. Je veux quand je clique sur l'un de ces boutons j'affiche son texte dans une colonne d'une nouvelle ligne de la datagrid view. Voilà mon code qui ne marche pas correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
                    panel_article.Controls[t - k].Text = (string)dgvArticle_commande.Rows[k].Cells[1].Value + "\n" + dgvArticle_commande.Rows[k].Cells[2].Value.ToString();
                    panel_article.Controls[t - k].Name = dgvArticle_commande.Rows[k].Cells[1].Value.ToString();
    panel_article.Controls[t - k].Click += new EventHandler(article_Click);
    et pour l'évènement article_click
    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
     
    public void article_Click(object sender, System.EventArgs e)
            {
     
     
                Button btnArticle = (Button)sender;
                string prixdgv = (string)btnArticle.Tag;
                float prix = Single.Parse(prixdgv);
                string nom = btnArticle.Name;
                //int nbreLigne = dgv_commande.Rows.Count - 1;
                int valeur = 0;
                int i = 0;
                if (dgv_commande.RowCount - 1 > 0)
                {
                    for (i = 0; i < dgv_commande.RowCount - 1;i++ )
                    {
     if (nom.Equals( dgvArticle_commande.Rows[i].Cells[1].Value.ToString()))
                        {
                            valeur = (int)this.dgv_commande.Rows[i].Cells[0].Value;
                            valeur+=1;
                            this.dgv_commande.Rows[i].Cells[0].Value = valeur;
                        }
     
     
                        else
                        {
     dgv_commande.Rows.Insert(i+1,1);
                            dgv_commande.Rows[i + 1].Cells[0].Value = 1;
                            dgv_commande.Rows[i + 1].Cells[1].Value = nom;
                            dgv_commande.Rows[i + 1].Cells[2].Value = "";
                            dgv_commande.Rows[i + 1].Cells[3].Value = "";
                            dgv_commande.Rows[i + 1].Cells[4].Value = prix;
     
                        }
     
                    }
                }
                else
                {
                    dgv_commande.Rows.Add(1, nom, "", "", prix);
     
                }
     
            }
    ça me gere une exception au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if (nom.Equals( dgvArticle_commande.Rows[i].Cells[1].Value.ToString()))
    de type
    La référence d'objet n'est pas définie à une instance d'objet
    .
    S'il vous plait aidez moi.

    Merci

  2. #2
    Membre confirmé Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Bonjour

    Je te conseille une technique.

    Tu crées une classe nommée Produit, une classe nommée Commande et une classe nommée LigneCommande.

    • Produit contient toutes les références du produit.
    • Commande contient une propriété _lignesCommande (Dictionary<int,LigneCommande>) et deux méthodes Add(Produit item) et Remove(Produit item).
    • LigneCommande contient un champ _quantité(int) et _produit(Produit).


    Lorsque tu affectes les infos aux boutons tu vas itérer sur une collection de Produits (List<Produit>) et mettre l'objet de type Produit concerné par le bouton dans la propriété Tag de celui-ci.

    Lors du click sur un bouton tu récupères le tag, le caste en objet de type Produit et appelle la méthode Add(Produit) de l'objet Commande. Cette méthode va vérifier si le produit fait déjà partie des lignes de commande en utilisant simplement _lignesCommande.ContainsKey(produitTag.id). Si c'est le cas il suffit de récupérer la ligne de commande dont tu connais la clef et incrémenter le champ _quantité. Si non il suffit d'instancier une nouvelle ligne de commande avec l'objet produit issu du tag, mettre la quantité à 1 et ajouter cette ligne à la liste des lignes de commande en utilisant l'id du produit comme valeur de clef.

    Enfin c'est la collection _lignesCommande qui servira de datasource à ta datagrid.

    J'espère t'avoir aidé

    Cordialement

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    A vrai dire ,je n'ai pas bien compris ton idée mais merci quand même pour ton soutien.Si tu peux expliqer davantage ça serait gentil et merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Bonjour elbj,
    Voilà j'ai pensé à faire une autre solution et c'est de créer un tableaub de type string puis de le remplir avec le même contenu du datagridview.
    Voilà mon 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
    28
    public  string [] tab  = new string [dgv_commande.RowCount];
    int valeur =0;
    if (dgv_commande.RowCount - 1 > 0)
                {
                    for (int i = 0; i <= tab.Length-1; i++)
                    {
                        if (tab[i]==nom)
                        {
                            valeur = (int)this.dgv_commande.Rows[i].Cells[0].Value;
                            valeur += 1;
                            this.dgv_commande.Rows[i].Cells[0].Value = valeur;
                        }
                        else
                        {
                            tab[i ] = nom;
                            dgv_commande.Rows[i+1 ].Cells[0].Value = 1;
                            dgv_commande.Rows[i+1].Cells[1].Value = nom;
                            dgv_commande.Rows[i +1].Cells[2].Value = "";
                            dgv_commande.Rows[i +1].Cells[3].Value = "";
                            dgv_commande.Rows[i +1].Cells[3].Value = prix;
                        }
     
                    }
    else
    {
      tab[0]=nom;
    dgv_commande.Rows.Add(1,nom,"","",prix);
    }
    Le code marche uniquement dans le cas ou je clique sur un bouton sur lequel j'ai déja cliqué ,mais si je clique sur un bouton pour la première fois ça me génère une exception
    :La référence d'objet n'est pas définie à une instance d'objet.
    S'il vous plaît aidez moi à contourner ce problème.
    Merci d'avance

  5. #5
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Salut

    sur quelle ligne est ton erreur?
    Le message que tu as veut dire que tu as un objet qui n'est pas défini. Il faut que tu le définisses avant de l'utiliser.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Au fait j'ai corrigé cette erreur,reste qu'il y a un conflit dans les lignes ;je m'explique lors d'un clic pour la première fois sur un bouton j'ai le bon affichage dans la datagridview car il est entrain d'exécuter cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    else
    {
      tab[0]=nom;
    dgv_commande.Rows.Add(1,nom,"","",prix);
    }
    mais le problème quand je clique sur un autre bouton sur lequel je n'ai cliqué aucune fois(c'est à dire ma datagridview n'est pas vide mais le texte du bouton ne figure pas dans la datagridview) ou si je reclique sur un bouton sur lequel j'ai déjà cliqué.Vraiment je bloque merci pour toute clarification.
    Cordialement

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Bonjour à tous ,voilà j'ai fais quelques améliorations dans mon code mais àa ne marche pas convenablement.Voilà mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    publicstring [] tab= newstring[dgv_commande.RowCount];
    J'ai crée un tableau de string pour que puisse effectuer la vérification sur lui c'est à dire je vérifie si le champ que je viens d'insérer existe déjà dans ma datagridview ou pas.
    Et le reste 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    publicvoidarticle_Click(object sender, System.EventArgs e)
            {
     
    ButtonbtnArticle = (Button)sender;
    stringprixdgv = (string)btnArticle.Tag;
    float prix= Single.Parse(prixdgv);
    string nom = btnArticle.Name;int valeur = 0;
     
    if (dgv_commande.RowCount - 1 > 0)
                {
    for (int i = 0; i <= tab.Length-1; i++)
                    {
    if (tab[i]==nom)
                        {
    valeur = (int)this.dgv_commande.Rows[i].Cells[0].Value;
    valeur += 1;
    this.dgv_commande.Rows[i].Cells[0].Value = valeur;
    prix += prix;
    this.dgv_commande.Rows[i].Cells[4].Value = prix;
     
     
    }
    else
                        {  
     
     
    intindice = (int)dgv_commande.RowCount - 1;
    tab[indice - 1] = nom;
    dgv_commande.Rows.Add();
     
    DataGridViewRow R = dgv_commande.Rows[indice];
    R.Cells ["quantite"].Value = 1;
    R.Cells["nom"].Value = nom;
    R.Cells["cuisson"].Value = "";
    R.Cells["accompagnement"].Value = "";
    R.Cells["prix"].Value = prix;
     
                        }
     
                    }
     
                }
    else
                {
    tab[0] = nom;
    dgv_commande.Rows.Add(1, nom, "", "", prix);
     
                }
     
            }
    Le problème survient dans cette ligne Il me dit que l'index se trouve en dehors des limites du tableau.Y'a t-il quelqu'un qui peut m'aider?
    Merci d'avance

  8. #8
    Membre confirmé Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int indice = (int)dgv_commande.RowCount - 1;
    tab[indice - 1] = nom;
    Si le RowCount donne 1 ton indice prend la valeur 0 et tu essayes d'accéder au tab[-1] ce qui est effectivement hors limite.

Discussions similaires

  1. Evenement leave et click sur un bouton
    Par sultan87 dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/11/2013, 17h45
  2. Réponses: 9
    Dernier message: 12/04/2013, 18h01
  3. Réponses: 3
    Dernier message: 30/03/2010, 12h22
  4. Automatiser le click sur le bouton d'un msgbox
    Par rootdaoud dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/05/2005, 10h31
  5. click sur le bouton + de jdbnavtoolbar
    Par hamido dans le forum JBuilder
    Réponses: 4
    Dernier message: 28/05/2004, 00h10

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