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 :

Remplir les cellules d'un DatagridView en remplissant une cellule


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Brésil

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 72
    Par défaut Remplir les cellules d'un DatagridView en remplissant une cellule
    Bonjour, je suis en train de faire une application en C#et c'est pour un supermarché. C'est un genre d'application pour les caissiers... Donc, je suis au niveau de l'enregistrement de la facture.
    J'ai un DatagridView et il y a 4-5 colonnes.
    Reference - Produit - Quantite - Prix Unitaire - Total

    Lorsque j'insère des données dans la partie Reference automatiquement les autres colonnes se remplissent en prenant les données de la base de donnée. Pour la première ligne ça fonctionne mais la deuxième ligne cela ne fonctionne pas...
    Voici le 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
    private void TAB_Credit_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        if (TAB_Credit.Columns[e.ColumnIndex].Name == "Reference")
        {
     
             string cmdText = @"SELECT * FROM tb_ajout_articles 
                                WHERE Reference=@ref";
             MySqlDataAdapter sa = new MySqlDataAdapter(cmdText, MyConnexion);
             sa.SelectCommand.Parameters.Add("@ref", MySqlDbType.VarChar).Value =
             TAB_Credit.Rows[e.RowIndex].Cells["Reference"].Value.ToString();
     
             DataTable dt2 = new DataTable();
             sa.Fill(dt);
     
             if (dt.Rows.Count == 1)
             {
                 TXT_Stock.Text = dt.Rows[0]["Quantite"].ToString();
                 //double value = (double)TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value * (double)TAB_Credit.Rows[e.RowIndex].Cells["Prix_Unitaire"].Value;
     
                 TAB_Credit.Rows[e.RowIndex].Cells["Designation"].Value = dt.Rows[0]["Designation"].ToString();
                 TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value = dt.Rows[0]["Quantite"].ToString();
                 TAB_Credit.Rows[e.RowIndex].Cells["Prix_Unitaire"].Value = dt.Rows[0]["Prix_Unitaire"].ToString();
                 TAB_Credit["Total", e.RowIndex].Value = 
                   Convert.ToString(
                   Convert.ToInt32(TAB_Credit["Quantite", e.RowIndex].Value) * 
                   Convert.ToInt32(TAB_Credit["Prix_Unitaire", e.RowIndex].Value));
                   //TAB_Credit.Rows[e.RowIndex].Cells["Total"].Value = value.ToString();
     
                 TXT_Brut.Text = TAB_Credit["Total", e.RowIndex].Value.ToString();
     
             }
         }
         if (TAB_Credit.CurrentCell.ColumnIndex == 6)
         {
             if (Convert.ToInt32(TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value) > Convert.ToInt32(TXT_Stock.Text))
             {
                 MessageBox.Show("Stock finished");
                 TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value = dt.Rows[0]["Quantite"].ToString();
     
             }
             else
             {
                 TAB_Credit["Total", e.RowIndex].Value = 
                       Convert.ToString(
                       Convert.ToInt32(TAB_Credit["Quantite", e.RowIndex].Value) * 
                       Convert.ToInt32(TAB_Credit["Prix_Unitaire", e.RowIndex].Value));
                 TXT_Brut.Text = TAB_Credit["Total", e.RowIndex].Value.ToString();
             }
         }
    Aussi je voudrai faire la somme des totaux à chaque ajout de produit pour donner le total de la facture..

    Voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void TAB_Credit_RowValidated(object sender, DataGridViewCellEventArgs e)
    {
        int sum = 0;
     
        for (int i = 0; i < TAB_Credit.Rows.Count; ++i)
        {
     
            sum += Convert.ToInt32(TAB_Credit.Rows[i].Cells["Total"].Value);
        }
     
        TAB_Credit.Rows[e.RowIndex].Cells["Total_Fact"].Value = sum.ToString();
    }
    Mais lorsque je passe à la deuxième ligne, l'application se plante.

  2. #2
    Membre très actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2016
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 154
    Par défaut
    Bonjour mon cher,
    tu pourrais commencer par encadrer ton code avec le bloc Try....Catch pour encapsuler les exceptions et ainsi empecher ton application de se planter

    Pour le reste, tout dépend de la logique que tu as implémenté dans ton application.
    je travaille avec les datagridview et généralement j'utilise 04 events (DataError, DefaulValueNeeded, CellEndEdit, RowLeave) pour gérer toutes les situations possible sur mon datagridview.
    Pour le total des lignes mis à jour automatiquement en cas d'ajout de suppression et modification de ligne normalement c'est dans ta base de donnée que tu dois aller chercher cette valeur avec une valeur de paramètre qui pourrait être le numéro de facture vu que les lignes sont envoyées vers la base de données au fur à mesure.

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    bonjour

    la logique voudrait que :

    si tu dois modifier une ligne, tu le fasses en te basant sur l'ID de la ligne pour directement modifier l'enregistrement en base de données.
    ainsi, ta base serait à jour et ta grille serait à raffraichir pour refleter l'état des données

Discussions similaires

  1. [Débutant] Remplir les colonnes de mon DatagridView
    Par Maxououou dans le forum C#
    Réponses: 0
    Dernier message: 07/01/2013, 10h11
  2. Réponses: 12
    Dernier message: 08/05/2009, 15h54
  3. Réponses: 2
    Dernier message: 31/03/2009, 14h22
  4. Réponses: 4
    Dernier message: 11/10/2007, 09h28
  5. Réponses: 1
    Dernier message: 24/05/2006, 23h27

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