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 :

c# gérer un datagridview


Sujet :

C#

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut c# gérer un datagridview
    bonjour, me voila encore une fois confronté a un soucis, normal je débute.

    Mes questions sont très simple et basic !

    1) Les données de mon datagridview peuvent être modifiées par l'utilisateur, exemple s'il change une référence comment faire pour attribuer le changement dans la base de donnée ?

    exemple ? lien explicatif ? conseil ?

    2) J'ai crée un bouton dans la colonne statut mais comment appeler ce bouton ?

    J'aimerai en faite exécuter une requête toute simple pour dire que la commande est effectué

    Exemple:
    update commande set co_sta=1 where co_ref="test";




    merci de votre aide et de votre patience.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    a titre d'info le bouton est: DataGridViewButtonColumn

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ton datagridview, tu le remplis "manuellement", ou il est lié à une source de données via la propriété DataSource ? S'il est lié, quelle est la source de données ? Une DataTable ? Une liste d'objets ?

    Tu ne donnes pas assez d'infos pour qu'on puisse t'aider...

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Par défaut
    Tout dépend de ta db mais si on suppose que tu travailles en access,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    using System.Data.OleDb;
     
    int intCount = 0;
    OleDbCommand cmd = new 
    OleDbCommand("MaConnectionString","MaCommandeSql");
    intCount  = cmd.ExecuteNonQuerry();
    intCount étant le nombre d'enregistrement affecté.

    si tu utilises sqlServer tu remplaces OleDb par SqlClient... (je le fais de tête alors ne te focalise pas sur le nom) et pour la command c'est sqldbcommand

    pour les modifs de ta grid, si tu as utilisé un adaptater :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DataSet ds = new DataSet();
    OledbDataAdapter adapter = new OledbDataAdapter("MaCommandeSql","sqlQuerry);
    adapter.Fill(ds);
    si tu as mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    adapter.Update(ds)
    perso je n'ai pas utilisé cette commande depuis longtemps car j'utilise les dbcommand alors test avant.



    ps : je viens de voir la réponse de tomlev c'est vrai t'es pas obligé d'avoir utilisé un dataset.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    voici le code qui me permet d'avoir la source de données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                    MySqlDataAdapter adapter_commande_attente = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com FROM commande WHERE co_sta=0 ORDER BY co_dat DESC", maconnexion);
                    MySqlDataAdapter adapter_commande_termine = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com FROM commande WHERE co_sta=1 ORDER BY co_dat ASC LIMIT 10", maconnexion);
     
                    DataSet dataset_commande = new DataSet();
                    adapter_commande_attente.Fill(dataset_commande, "commande_attente");
                    DataSet dataset_termine = new DataSet();
                    adapter_commande_termine.Fill(dataset_commande, "commande_termine");
     
                    DataView MonDataView = dataset_commande.Tables["commande_attente"].DefaultView;
                    dataGridView_attente.DataSource = MonDataView;
                    DataView MonDataView2 = dataset_commande.Tables["commande_termine"].DefaultView;
                    dataGridView_termine.DataSource = MonDataView2;
    base de donnée: MySql

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu veux que le click sur le bouton enregistre juste la ligne en cours, c'est ça ?

    Alors, en fait, quand un DataGridView est lié à une DataTable (ou une DataView), la DataTable est automatiquement mise à jour avec les changements faits dans le DataGridView, il n'y a rien à faire de particulier. Pour mettre que les changements dans la DataTable soient effectués sur la base de données, il faut utiliser la méthode DbDataAdapter.Update. En général on le fait pour une table entière, mais on peut aussi le faire sur une ligne en particulier (ou plusieurs) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void dataGridView_attente_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex >= 0 && e.ColumnIndex == columnButtonStatut.Index)
        {
     
            // obtenir la DataRow correspondant à la ligne courante du DataGridView
            DataRowView drv = dataGridView_attente.CurrentRow.DataBoundItem as DataRowView;
            adapter_commande_attente.Update(new DataRow[] { drv.Row });
        }
    }
    EDIT: apparemment tu n'as pas défini les UpdateCommand, InsertCommand et DeleteCommand de tes adapteurs. Tu peux les faire générer automatiquement en ajoutant ça à l'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter_commande_attente);

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    merci de m'aider tomlev mais je vais repréciser ce que je demande pour que l'on soit bien d'accord.


    dans mon datagridview je veux faire des modifications directement dessus. Tu me dis que c'est très simple en utilisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private void dataGridView_attente_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex >= 0 && e.ColumnIndex == columnButtonStatut.Index)
        {
     
            // obtenir la DataRow correspondant à la ligne courante du DataGridView
            DataRowView drv = dataGridView_attente.CurrentRow.DataBoundItem as DataRowView;
            adapter_commande_attente.Update(new DataRow[] { drv.Row });
        }
    }
    de ce faite avec le code ci-dessus je peux faire mes modifications avec une écriture sur ma base de donnée automatiquement ?
    c'est bien sa ?


    De plus a propos du "click" mon bouton qui se situe sur chaque ligne, j'aimerai lors de son clique effectuer une requete sql afin de faire passer cette commande en attente en terminé. La je n'ai pas compris comment faire.

  8. #8
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Par défaut
    Ben non,; c'est le principe des datasets : être déconnecté.

    Bref :
    1 - Tu charges le set
    2 - Tu modifies le set
    3 - Tu enregistres les modifications

    Donc tu vas à contre nature du dataset

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    donc l'enregistrement doit se faire sur un évènement ?
    genre sur un bouton enregistré ? ou sur la fermeture de la fenêtre c'est sa ?

    et non pas automatiquement tout au long de la saisi ?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par noobyyy Voir le message
    De plus a propos du "click" mon bouton qui se situe sur chaque ligne, j'aimerai lors de son clique effectuer une requete sql afin de faire passer cette commande en attente en terminé. La je n'ai pas compris comment faire.
    OK, j'avais pas bien compris ton problème... dans ce cas, par rapport au code que je t'ai donné, il faut juste que tu modifies la valeur de la colonne co_sta dans la DataTable avant d'appeler Update :

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    ok je comprends ce que tu me dis mais j'ai du mal a le réaliser niveau code:

    ton 1er code si je l'insert bah j'aurai un problème avec la ligne adapter_commande_attente.Update(new DataRow[] { drv.Row });
    car il connait pas adapter_commande_attente.

    et donc avec ce 1er code tout ce qui j'écris c'est automatiquement mis sur ma base de donnée ? pas besoin de faire une requete paramétré en indiquant un update ?

    --

    pour ce qui est du bouton désolé je suis nul, je n'ai pas compris ou mettre drv.Row["co_sta"] = 1; ?

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par noobyyy Voir le message
    ton 1er code si je l'insert bah j'aurai un problème avec la ligne adapter_commande_attente.Update(new DataRow[] { drv.Row });
    car il connait pas adapter_commande_attente.
    Ben c'est le adapter_commande_attente qui vient du code que tu as indiqué... mais il faudrait le déclarer comme membre de la classe, et non comme variable locale, pour pouvoir le réutiliser dans une autre méthode.

    Citation Envoyé par noobyyy Voir le message
    et donc avec ce 1er code tout ce qui j'écris c'est automatiquement mis sur ma base de donnée ? pas besoin de faire une requete paramétré en indiquant un update ?
    Non, l'update est généré automatiquement au besoin par le MySqlCommandBuilder

    Citation Envoyé par noobyyy Voir le message
    pour ce qui est du bouton désolé je suis nul, je n'ai pas compris ou mettre drv.Row["co_sta"] = 1; ?
    ben je te l'ai dit, juste avant le adapter_commande_attente.Update (dans l'évènement CellClick)

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    mais le MySqlCommandBuilder il se met a quel moment du code ?
    il se met pas:
    * au click car je clique pas sur le bouton
    * ni au load car j'effectue pas de mise à jour au démarrage de la fenetre

    donc c'est pas lol


    sinon ce code est correct faut juste que je trouve comment faire en sorte quil y a plus d'erreur sur adapter_commande_attente.Update
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void dataGridView_attente_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex >= 0 && e.ColumnIndex == details.Index)
        {
     
            // obtenir la DataRow correspondant à la ligne courante du DataGridView
            DataRowView drv = dataGridView_attente.CurrentRow.DataBoundItem as DataRowView;
            adapter_commande_attente.Update(new DataRow[] { drv.Row });
    		drv.Row["co_sta"] = 1;
        }
    }

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par noobyyy Voir le message
    mais le MySqlCommandBuilder il se met a quel moment du code ?
    il se met pas:
    * au click car je clique pas sur le bouton
    * ni au load car j'effectue pas de mise à jour au démarrage de la fenetre
    Le fait de créer le CommandBuilder ne fait pas la mise à jour, ça prépare juste l'adapteur pour qu'il puisse faire la mise à jour.
    Il faut le faire à l'endroit où tu initialises l'adapteur (cf. ton post #5)


    Citation Envoyé par noobyyy Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            adapter_commande_attente.Update(new DataRow[] { drv.Row });
    		drv.Row["co_sta"] = 1;
    Je t'ai dit de le mettre avant, pas après...

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    comme sa:

    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
    53
     
     
            public MySqlConnection maconnexion;
     
            private void liste_Load(object sender, EventArgs e)
            {
     
                try
                {
                    timer_reload.Enabled = true;
     
                    // Connexion à la base de données
                    string connexion = "Server=IP;Port=3306;Database=db_commande;Uid=PSEUDO;Pwd=MDP;";
                    maconnexion = new MySqlConnection(connexion);
                    maconnexion.Open(); // Ouverture
     
                    MySqlDataAdapter adapter_commande_attente = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, for_nom, gra_nom, pro_nom FROM commande,forma,grammage,produit WHERE co_for=for_id AND co_gra=gra_id AND co_pro=pro_id AND co_sta=0 ORDER BY co_dat DESC", maconnexion);
                    MySqlDataAdapter adapter_commande_termine = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, for_nom, gra_nom, pro_nom FROM commande,forma,grammage,produit WHERE co_for=for_id AND co_gra=gra_id AND co_pro=pro_id AND co_sta=1 ORDER BY co_dat ASC LIMIT 10", maconnexion);
     
                    MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter_commande_attente);
     
                    DataSet dataset_commande = new DataSet();
                    adapter_commande_attente.Fill(dataset_commande, "commande_attente");
                    DataSet dataset_termine = new DataSet();
                    adapter_commande_termine.Fill(dataset_commande, "commande_termine");
     
                    DataView MonDataView = dataset_commande.Tables["commande_attente"].DefaultView;
                    dataGridView_attente.DataSource = MonDataView;
                    DataView MonDataView2 = dataset_commande.Tables["commande_termine"].DefaultView;
                    dataGridView_termine.DataSource = MonDataView2;
     
     
                }
                catch (Exception)
                {
                    MessageBox.Show("Connexion impossible avec le serveur, veuillez vérifier son état !", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
     
     
     
     
            private void dataGridView_attente_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if (e.RowIndex >= 0 && e.ColumnIndex == details.Index)
                {
                    MySqlDataAdapter adapter_commande_attente = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, for_nom, gra_nom, pro_nom FROM commande,forma,grammage,produit WHERE co_for=for_id AND co_gra=gra_id AND co_pro=pro_id AND co_sta=0 ORDER BY co_dat DESC", maconnexion);
                    // obtenir la DataRow correspondant à la ligne courante du DataGridView
                    DataRowView drv = dataGridView_attente.CurrentRow.DataBoundItem as DataRowView;
                    drv.Row["co_sta"] = 1;
                    adapter_commande_attente.Update(new DataRow[] { drv.Row });
                }
            }
    il y a un truc qui cloche car rien ne se passe...

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    mets des points d'arrêt et exécute en pas à pas pour voir ce qu'il se passe

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    erf jsuis pas très copain avec les points d'arrêts lol

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par noobyyy Voir le message
    erf jsuis pas très copain avec les points d'arrêts lol
    euh... c'est-à-dire ? Je vois pas trop où est la difficulté... tu cliques dans la marge de la ligne où tu veux mettre ton point d'arrêt, et c'est tout...

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    non c'est sure mais comment tu veux que je trouve l'erreur, je ne sais pas quoi controler en faite

  20. #20
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Tomlev, cherches pas, il veut qu'on lui fasse le boulot à sa place.
    C'est pas comme ça qu'il apprendra. Noobyyy si tu prends pas le temps de comprendre ce que tu fais, je te garanti que ça va servir à rien. C'est bien de débuter, mais tu n'auras pas toujours quelqu'un sous la main pour faire ce que tu ne sais pas faire! Renseigne toi, apprends, c'est la meilleure manière d'y arriver...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 7 12345 ... DernièreDernière

Discussions similaires

  1. [VB.NET] DataGridView, gérer cases à cocher
    Par tssi555 dans le forum VB.NET
    Réponses: 15
    Dernier message: 20/01/2009, 09h19
  2. Réponses: 6
    Dernier message: 31/07/2007, 10h13
  3. Réponses: 3
    Dernier message: 02/05/2007, 16h32
  4. gérer le copie coller sur un Datagridview
    Par wodel dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/05/2007, 19h55
  5. Réponses: 2
    Dernier message: 23/08/2006, 20h38

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