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. #41
    Débutant
    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
    Points : 219
    Points
    219
    Par défaut
    Citation Envoyé par tomlev
    Non, l'update est généré automatiquement au besoin par le MySqlCommandBuilder
    Citation Envoyé par B.AF
    Faudrait peut être vu ta requête spécifier la condition update...
    Disons que vu que je débute et je fais entièrement confiance aux messages des modérateurs donc j'apprends en fonction de cela, mais comme tomlev dit:

    Citation Envoyé par tomlev;
    Dans ce cas le CommandBuilder ne marche pas, il faut que tu écrives toi-même les requêtes de mise à jour...
    OK ! d'accord je comprends mieux !

    Citation Envoyé par tomlev
    Si tu ne comptes mettre à jour que le statut, et que tu n'insères ou supprimes jamais de lignes, il suffit de définir une UpdateCommand, avec des paramètres qui correspondent aux champs de la DataTable. Ca donne quelque chose comme ça (d'après ton premier post)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MySqlCommand cmd = maconnexion.CreateCommand();
    cmd.CommandText = "update commande set co_sta=@co_sta where co_ref=@co_ref";
    cmd.Parameters.Add("@co_sta", MySqlDbType.Int32, 0, "co_sta");
    cmd.Parameters.Add("@co_ref", MySqlDbType.String, 0, "co_ref");
    adapter_commande_attente.UpdateCommand = cmd;
    Je veux changer que le statut lors du clique uniquement mais souviens toi que j'avais précisé que je voulais apporter des modifications sur l'ensemble de ma commande car j'ai coché dans l'option de mon datagridview : modification.
    Et pour le moment je ne comprends pas comment sa modifie exemple image 1er post la référence ou un autre champ. Je reprécise que ma fenetre est actualisé toutes les 2 minutes donc il faudrait pas que je place au mauvais endroit une requête update qui va s'effectuer toutes les 2 minutes.

    Citation Envoyé par tomlev
    Pas la peine de faire 2 datasets, tu peux mettre 2 DataTables dans le même DataSet. D'ailleurs, vu que la seule différence entre les 2 est le statut, il vaudrait mieux tout charger dans la même DataTable, et à l'affichage, filtrer selon le statut (à l'aide de DataViews)
    ah ok ! pas bête je savais pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // donc il y en aura 1 seul
    public DataSet dataset_commande = new DataSet();
     
    //je me doute bien que les lignes suivantes vont être modifiées :
                    DataView MonDataView = dataset_commande.Tables["commande_attente"].DefaultView;
                    dataGridView_attente.DataSource = MonDataView;
                    DataView MonDataView2 = dataset_commande.Tables["commande_termine"].DefaultView;
                    dataGridView_termine.DataSource = MonDataView2;
    et comment je fais pour filtrer à l'aide de mon dataviews ? (exemple ? lien ? ce que tu veux pour m'aider a ce sujet)

  2. #42
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par noobyyy Voir le message
    je fais entièrement confiance aux messages des modérateurs
    Euh... faut pas non plus prendre tout ce que je raconte pour argent comptant, il m'arrive de me tromper, hein

    Citation Envoyé par noobyyy Voir le message
    Je veux changer que le statut lors du clique uniquement mais souviens toi que j'avais précisé que je voulais apporter des modifications sur l'ensemble de ma commande car j'ai coché dans l'option de mon datagridview : modification.
    Dans ce cas, dans l'UpdateCommand il faut mettre à jour tous les champs, avec un paramètre pour chaque champ qui fait le lien entre une colonne de la DataTable et une colonne de la table en base

    Citation Envoyé par noobyyy Voir le message
    ah ok ! pas bête je savais pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // donc il y en aura 1 seul
    public DataSet dataset_commande = new DataSet();
     
    //je me doute bien que les lignes suivantes vont être modifiées :
                    DataView MonDataView = dataset_commande.Tables["commande_attente"].DefaultView;
                    dataGridView_attente.DataSource = MonDataView;
                    DataView MonDataView2 = dataset_commande.Tables["commande_termine"].DefaultView;
                    dataGridView_termine.DataSource = MonDataView2;
    et comment je fais pour filtrer à l'aide de mon dataviews ? (exemple ? lien ? ce que tu veux pour m'aider a ce sujet)
    Pas besoin de 2 DataTables commande_attente et commande_termine. Tu mets tout dans une seule DataTable commande, et tu crées tes vues comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataView dataView_attente = new DataView(dataset.Tables["commande"], "co_sta = 0", null, DataViewRowState.CurrentRows);
    DataView dataView_termine = new DataView(dataset.Tables["commande"], "co_sta = 1", null, DataViewRowState.CurrentRows);

  3. #43
    Débutant
    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
    Points : 219
    Points
    219
    Par défaut
    OK ^^

    dit moi avant de tester tout sa j'ai une question !

    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, co_sta, co_fac, co_imp, 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, co_sta, co_fac, co_imp, 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);
     
                    MySqlCommand cmd = maconnexion.CreateCommand();
                    cmd.CommandText = "UPDATE commande SET co_sta=@co_sta WHERE co_ref=@co_ref";
                    cmd.Parameters.Add("@co_sta", MySqlDbType.Int32, 0, "co_sta");
                    cmd.Parameters.Add("@co_ref", MySqlDbType.String, 0, "co_ref");
                    adapter_commande_attente.UpdateCommand = cmd;
     
     
                    adapter_commande_attente.Fill(dataset_commande, "commande_attente");                
                    adapter_commande_termine.Fill(dataset_commande, "commande_termine");
    Je dois en garder un seul alors de DataAdapter ?

  4. #44
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par noobyyy Voir le message
    Je dois en garder un seul alors de DataAdapter ?
    Oui

  5. #45
    Débutant
    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
    Points : 219
    Points
    219
    Par défaut
    ok et comment je dis que mon 1er tableau c'est co_sta=0 et le second tableau co_sta=1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                    DataView dataView_attente = new DataView(dataset_commande.Tables["commande"], "co_sta = 0", null, DataViewRowState.CurrentRows);
                    DataView dataView_termine = new DataView(dataset_commande.Tables["commande"], "co_sta = 1", null, DataViewRowState.CurrentRows);

  6. #46
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    tu mets dataView_attente comme DataSource d'un des DataGridView, et dataView_termine comme DataSource de l'autre...

  7. #47
    Débutant
    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
    Points : 219
    Points
    219
    Par défaut
    Pour le datasource je ne peux pas écrire ce que tu me dis dans les propriétés ! il veut que je choisisse une source de donnée
    alors jl'ai écris tel quel dans le code source mais je tombe sur mon erreur (try)
    sinon depuis les modifs je n'arrive pas a afficher mes lignes.
    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
     
            public MySqlConnection maconnexion;
            public DataSet dataset_commande = new DataSet();
     
            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 = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, co_sta, co_fac, co_imp, 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);
     
                    MySqlCommand cmd = maconnexion.CreateCommand();
                    cmd.CommandText = "UPDATE commande SET co_sta=@co_sta WHERE co_ref=@co_ref";
                    cmd.Parameters.Add("@co_sta", MySqlDbType.Int32, 0, "co_sta");
                    cmd.Parameters.Add("@co_ref", MySqlDbType.String, 0, "co_ref");
                    adapter_commande.UpdateCommand = cmd;
     
                    adapter_commande.Fill(dataset_commande, "commande_attente");                
     
                    DataView dataView_attente = new DataView(dataset_commande.Tables["commande"], "co_sta = 0", null, DataViewRowState.CurrentRows);
                    dataGridView_attente.DataSource = dataView_attente;
                    DataView dataView_termine = new DataView(dataset_commande.Tables["commande"], "co_sta = 1", null, DataViewRowState.CurrentRows);
                    dataGridView_termine.DataSource = dataView_termine;
                }
                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 = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, co_fac, co_imp, for_nom, gra_nom, pro_nom, co_sta 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);
                    adapter_commande.Fill(dataset_commande, "commande_attente");
     
                    // obtenir la DataRow correspondant à la ligne courante du DataGridView
                    DataRowView drv = dataGridView_attente.CurrentRow.DataBoundItem as DataRowView;
                    drv.Row["co_sta"] = 1;
     
                    adapter_commande.Update(dataset_commande, "commande_attente");
                    MessageBox.Show("Commande terminée !", "Validation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
    qu'est-ce qu'il ne va pas ?

  8. #48
    Membre éprouvé 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
    Points : 1 188
    Points
    1 188
    Par défaut
    salut,
    executes pas à pas et regardes où ça pète. Ensuite tu seras plus à même de trouver la source de l'erreur
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  9. #49
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    adapter_commande.Fill(dataset_commande, "commande_attente");                
     
                    DataView dataView_attente = new DataView(dataset_commande.Tables["commande"]
    Avec ton Fill, tu crées une DataTable qui s'appelle "commande_attente", et ensuite tu essaies d'accéder à la DataTable "commande"... qui n'existe pas

  10. #50
    Débutant
    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
    Points : 219
    Points
    219
    Par défaut
    ah oui ok, j'ai tout mis en "commande" je tombe toujours sur mon erreur
    sinon es-tu sures que ce code ci-dessous se met bien dans le load ? car je ne comprends pas pourquoi on ferai un update dès le début alors qu'on a rien fait ? ou alors sa se déclenche automatiquement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    MySqlCommand cmd = maconnexion.CreateCommand();
                    cmd.CommandText = "UPDATE commande SET co_sta=@co_sta WHERE co_ref=@co_ref";
                    cmd.Parameters.Add("@co_sta", MySqlDbType.Int32, 0, "co_sta");
                    cmd.Parameters.Add("@co_ref", MySqlDbType.String, 0, "co_ref");
                    adapter_commande.UpdateCommand = cmd;

    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 MySqlConnection maconnexion;
            public DataSet dataset_commande = new DataSet();
     
            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 = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, co_sta, co_fac, co_imp, 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);
     
                    MySqlCommand cmd = maconnexion.CreateCommand();
                    cmd.CommandText = "UPDATE commande SET co_sta=@co_sta WHERE co_ref=@co_ref";
                    cmd.Parameters.Add("@co_sta", MySqlDbType.Int32, 0, "co_sta");
                    cmd.Parameters.Add("@co_ref", MySqlDbType.String, 0, "co_ref");
                    adapter_commande.UpdateCommand = cmd;
     
                    adapter_commande.Fill(dataset_commande, "commande");
     
                    DataView dataView_attente = new DataView(dataset_commande.Tables["commande"], "co_sta = 0", null, DataViewRowState.CurrentRows);
                    dataGridView_attente.DataSource = dataView_attente;
                    DataView dataView_termine = new DataView(dataset_commande.Tables["commande"], "co_sta = 1", null, DataViewRowState.CurrentRows);
                    dataGridView_termine.DataSource = dataView_termine;
                }
                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 = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, co_fac, co_imp, for_nom, gra_nom, pro_nom, co_sta 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);
                    adapter_commande.Fill(dataset_commande, "commande");
     
                    // obtenir la DataRow correspondant à la ligne courante du DataGridView
                    DataRowView drv = dataGridView_attente.CurrentRow.DataBoundItem as DataRowView;
                    drv.Row["co_sta"] = 1;
     
                    adapter_commande.Update(dataset_commande, "commande");
                    MessageBox.Show("Commande terminée !", "Validation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }

  11. #51
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par noobyyy Voir le message
    ah oui ok, j'ai tout mis en "commande" je tombe toujours sur mon erreur
    Ben oui mais si tu nous dis pas quelle est l'erreur et où elle se produit, on va pas s'en sortir... on peut pas tout deviner

    Citation Envoyé par noobyyy Voir le message
    sinon es-tu sures que ce code ci-dessous se met bien dans le load ? car je ne comprends pas pourquoi on ferai un update dès le début alors qu'on a rien fait ? ou alors sa se déclenche automatiquement ?
    Je te l'ai déjà expliqué : on ne fait pas d'update au début. On définit seulement la commande qui sera utilisée pour l'update.

    Sinon il reste un "co_sta = 0" dans ton SELECT, il faut l'enlever sinon tu ne récupèreras que les commandes en attente...

  12. #52
    Débutant
    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
    Points : 219
    Points
    219
    Par défaut
    ok c'est ma faute sa s'affiche correctement, sinon pour le bouton effectuer si on déclare tout dans le load alors je ne pourrais pas utiliser ExecuteScalar(); dans le cellclick pour utiliser l'update non ?

  13. #53
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par noobyyy Voir le message
    pour le bouton effectuer si on déclare tout dans le load alors je ne pourrais pas utiliser ExecuteScalar(); dans le cellclick pour utiliser l'update non ?
    Quel rapport avec ExecuteScalar ? Je ne te suis plus, là...
    C'est adapter_commande.Update qu'il faut utiliser pour mettre à jour la base. il faut donc déclarer adapter_commande comme membre de la classe (en dehors de la méthode liste_Load) pour qu'il soit accessible à partir du CellClick

  14. #54
    Membre éprouvé 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
    Points : 1 188
    Points
    1 188
    Par défaut
    non, tu devras utiliser ExecuteNonQuery().
    Regarde bien la différence entre executescalar, execute reader, executenonquery...
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  15. #55
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    non, tu devras utiliser ExecuteNonQuery().
    Ben non... enfin, pas explicitement en tous cas, puisqu'il passe par un DataAdapter (mais effectivement l'update du dataadapter appellera ExecuteNonQuery)

  16. #56
    Débutant
    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
    Points : 219
    Points
    219
    Par défaut
    okok je comprends !
    sisqo60, ok je ferai des petites recherches dessus.

    bon admettons que j'ai bien déclaré adapter_commande (string)
    je dois maintenant m'occuper du bouton effectuer dans cellclick.

    ce que j'ai au dessus:
    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
     
            public MySqlConnection maconnexion;
            public DataSet dataset_commande = new DataSet();
            public string adapter_commande;
            public MySqlCommand cmd;
     
     
            private void liste_Load(object sender, EventArgs e)
            {
     
                    timer_reload.Enabled = true;
     
                    // Connexion à la base de données
                    string connexion = "Server=192.168.0.39;Port=3306;Database=db_commande;Uid=PSEUDO;Pwd=MDP;";
                    maconnexion = new MySqlConnection(connexion);
                    maconnexion.Open(); // Ouverture
     
                    MySqlDataAdapter adapter_commande = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, co_sta, co_fac, co_imp, 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 ORDER BY co_dat DESC", maconnexion);
     
                    cmd = maconnexion.CreateCommand();
                    cmd.CommandText = "UPDATE commande SET co_sta=@co_sta WHERE co_ref=@co_ref";
                    cmd.Parameters.Add("@co_sta", MySqlDbType.Int32, 0, "co_sta");
                    cmd.Parameters.Add("@co_ref", MySqlDbType.String, 0, "co_ref");
                    adapter_commande.UpdateCommand = cmd;
     
                    adapter_commande.Fill(dataset_commande, "commande");
     
                    DataView dataView_attente = new DataView(dataset_commande.Tables["commande"], "co_sta = 0", null, DataViewRowState.CurrentRows);
                    dataGridView_attente.DataSource = dataView_attente;
                    DataView dataView_termine = new DataView(dataset_commande.Tables["commande"], "co_sta = 1", null, DataViewRowState.CurrentRows);
                    dataGridView_termine.DataSource = dataView_termine;
     
            }
    au moment du clique:
    comment faire pour exécuté alors adapter_commande ?
    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
     
            private void dataGridView_attente_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if (e.RowIndex >= 0 && e.ColumnIndex == details.Index)
                {
                    MySqlDataAdapter adapter_commande = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, co_fac, co_imp, for_nom, gra_nom, pro_nom, co_sta 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);
                    adapter_commande.Fill(dataset_commande, "commande");
     
                    // obtenir la DataRow correspondant à la ligne courante du DataGridView
                    DataRowView drv = dataGridView_attente.CurrentRow.DataBoundItem as DataRowView;
                    drv.Row["co_sta"] = 1;
     
                    adapter_commande.Update(dataset_commande, "commande");
                    MessageBox.Show("Commande terminée !", "Validation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }

  17. #57
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par noobyyy Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            public string adapter_commande;
    Mais pourquoi tu le déclares en string ?
    C'est le adapter_commande que tu déclares dans liste_Load qu'il faut sortir de liste_Load... Donc, hors de la méthode liste_Load, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private MySqlDataAdapter adapter_commande;
    et dans la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    adapter_commande = new MySqlDataAdapter(...);
    ...
    et évite de tout déclarer en public quand ce n'est pas nécessaire...

    Le code dans dataGridView_attente_CellClick a l'air correct...

    EDIT: et tu as toujours pas enlevé le "co_sta = 0" de la clause WHERE... il ne sert à rien, puisque tu filtres avec les DataView

  18. #58
    Débutant
    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
    Points : 219
    Points
    219
    Par défaut
    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
     
           public MySqlConnection maconnexion;
            public DataSet dataset_commande = new DataSet();
            private MySqlDataAdapter adapter_commande;
            public MySqlCommand cmd;
     
            private void liste_Load(object sender, EventArgs e)
            {
                    timer_reload.Enabled = true;
     
                    // Connexion à la base de données
                    string connexion = "Server=192.168.0.39;Port=3306;Database=db_commande;Uid=developer;Pwd=negresko;";
                    maconnexion = new MySqlConnection(connexion);
                    maconnexion.Open(); // Ouverture
     
                    adapter_commande = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, co_sta, co_fac, co_imp, 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 ORDER BY co_dat DESC", maconnexion);
     
                    cmd = maconnexion.CreateCommand();
                    cmd.CommandText = "UPDATE commande SET co_sta=@co_sta WHERE co_ref=@co_ref";
                    cmd.Parameters.Add("@co_sta", MySqlDbType.Int32, 0, "co_sta");
                    cmd.Parameters.Add("@co_ref", MySqlDbType.String, 0, "co_ref");
                    adapter_commande.UpdateCommand = cmd;
     
                    adapter_commande.Fill(dataset_commande, "commande");
     
                    DataView dataView_attente = new DataView(dataset_commande.Tables["commande"], "co_sta = 0", null, DataViewRowState.CurrentRows);
                    dataGridView_attente.DataSource = dataView_attente;
                    DataView dataView_termine = new DataView(dataset_commande.Tables["commande"], "co_sta = 1", null, DataViewRowState.CurrentRows);
                    dataGridView_termine.DataSource = dataView_termine;
     
            }
     
            private void dataGridView_attente_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if (e.RowIndex >= 0 && e.ColumnIndex == details.Index)
                {
                    adapter_commande = new MySqlDataAdapter("SELECT co_ref, co_fich, co_dat, co_qte, co_del, co_com, co_fac, co_imp, for_nom, gra_nom, pro_nom, co_sta FROM commande,forma,grammage,produit WHERE co_for=for_id AND co_gra=gra_id AND co_pro=pro_id ORDER BY co_dat ASC", maconnexion);
                    adapter_commande.Fill(dataset_commande, "commande");
     
                    // obtenir la DataRow correspondant à la ligne courante du DataGridView
                    DataRowView drv = dataGridView_attente.CurrentRow.DataBoundItem as DataRowView;
                    drv.Row["co_sta"] = 1;
     
                    adapter_commande.Update(dataset_commande, "commande");
                    MessageBox.Show("Commande terminée !", "Validation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
    comment faire pour éviter l'erreur sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    adapter_commande.Update(dataset_commande, "commande");

  19. #59
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par noobyyy Voir le message
    comment faire pour éviter l'erreur sur:
    je n'ai pas du tout suivi cette discussion, mais je te conseille d'être plus précis dans tes questions : quand tu dis "erreur", tu veux dire quoi ? Ton programme compile pas ? Il lance une exception ? Il fait pas ce que tu veux ?

    C'est comme si tu disais "docteur, je me sens pas bien", sans dire si t'as mal à la gorge, si tu t'es coincé un doigt dans une porte ou si ton chien est mort
    ಠ_ಠ

  20. #60
    Débutant
    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
    Points : 219
    Points
    219
    Par défaut
    je ne l'ai pas préciser car le message d'erreur est expliqué plus haut.

    ERREUR:
    Update requiert un UpdateCommand valide lors du passage de la collection DataRow avec des lignes modifiées.

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

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