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. #21
    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
    et comment tu veux que je trouve la soluce ! j'ai pas de cours ? ta un lien ?


    jviens de faire un point d'arret sur:

    tout ce qui est la n'est pas traité
    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)
                {
                    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 });
                }
            }

  2. #22
    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
    non c'est sure mais comment tu veux que je trouve l'erreur, je ne sais pas quoi controler en faite
    Ben ça suppose déjà que tu aies compris le code que tu as écrit jusqu'ici... et j'ai comme l'impression que ce n'est pas le cas

    Citation Envoyé par noobyyy Voir le message
    et comment tu veux que je trouve la soluce ! j'ai pas de cours ? ta un lien ?
    Tu pourrais peut-être commencer par faire un tour ici...
    http://dotnet.developpez.com/cours/

    Et en particulier :
    C# : http://tahe.developpez.com/dotnet/csharp/
    ADO.NET : http://dotnet.developpez.com/articles/ado1/ et http://dotnet.developpez.com/articles/ado2/
    ça concerne SQL Server, mais les principes sont valables pour tous les autres types de BDD (il suffit de remplacer Sql*** par MySql***...)


    Citation Envoyé par noobyyy Voir le message
    jviens de faire un point d'arret sur:

    tout ce qui est la n'est pas traité
    Il ne suffit pas de coller la fonction... il faut la lier à l'évènement CellClick du DataGridView, sinon évidemment elle ne sera jamais appelée. J'ai pas précisé parce que c'était évident. Si ça ne l'est pas pour toi, c'est que tu n'as pas les bases nécessaires pour faire ce que tu essaies de faire... donc commence par te former, parce que sinon tout ce que je te raconte ne sert à rien

  3. #23
    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 j'ai oublié l'évènement car je ne suis pas habitué et dessuite je ne comprends pas ce code.

    une fois le clique sur le bouton effectuer
    j'ai une erreur:
    La colonne 'co_sta' n'appartient pas à la table commande_attente.
    a propos de la ligne ci-dessous:
    drv.Row["co_sta"] = 1;


    sinon pour les liens j'ai déja regardé il ya longtemps, surtout pour le PDF de 20mo !! que je connais très bien ! dommage qu'il ne traite pas ce dont j'ai besoin actuellement.

    On me donne toujours des liens a aller voir, sauf que j'y suis déja aller! ce n'est pas toujours une référence et il y a pas ce que je cherche donc je viens poster ici.
    je code depuis vraiment très peu en c# alors désolé une fois de plus d'etre un bon a rien.

    On est tous passé par la difficulté...

  4. #24
    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
    une fois le clique sur le bouton effectuer
    j'ai une erreur:
    La colonne 'co_sta' n'appartient pas à la table commande_attente.
    a propos de la ligne ci-dessous:
    drv.Row["co_sta"] = 1;
    La colonne n'existe pas dans la table parce qu'elle n'est pas dans la requête SELECT du DataAdapter...

  5. #25
    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
    Je crois que le message est explicite.

    tu dois avoir une erreur dans le nom de ta colonne.

  6. #26
    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
    effectivement j'avais pas mis: co_sta (merci)

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


    que signifie cette erreur ?

    sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    adapter_commande_attente.Update(new DataRow[] { drv.Row });

  7. #27
    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
    Citation Envoyé par noobyyy Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    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);
    donc col sta n'est pas présente vu que dans ton select tu ne la reprends pas.
    La colonne dans la clause where n'est pas obligatoirement importé.

  8. #28
    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
    ouaip jlai zapé

  9. #29
    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
    Citation Envoyé par noobyyy Voir le message
    effectivement j'avais pas mis: co_sta (merci)

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


    que signifie cette erreur ?

    sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    adapter_commande_attente.Update(new DataRow[] { drv.Row });
    Que la requête auto généré ne correspond pas aux données que tu lui a donné.

    ne t'embête pas a choisir la ligne, renvoie le dataset, il ne traitera que ce qui a été modifié.

  10. #30
    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
    je dois faire une requete update ?
    en utilisant:
    UpdateCommand c'est sa ?

  11. #31
    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
    Update requiert un UpdateCommand valide lors du passage de la collection DataRow avec des lignes modifiées.


    que signifie cette erreur ?
    Arf... c'est parce que tu n'as pas défini UpdateCommand/DeleteCommand/InsertCommand dans le DataAdapter. Mais normalement le MySqlCommandBuilder est supposé gérer ça...
    Ca marche si tu remplace la ligne par ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    adapter_commande_attente.Update(dataset_commande, "commande_attente");
    Citation Envoyé par matrix_ceg Voir le message
    Que la requête auto généré ne correspond pas aux données que tu lui a donné.
    Non, ça veut plutôt dire qu'aucune requête n'a été auto-générée... et c'est bien ça qui me semble bizarre

  12. #32
    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
    j'ai du rajouté le dataset d'en haut pour pouvoir l'utiliser, je ne sais pas comment faire pour pourvoir l'utiliser sur toutes mes méthodes.

    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
     
            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, 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);
                    DataSet dataset_commande = new DataSet();
                    adapter_commande_attente.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_attente.Update(dataset_commande, "commande_attente");
     
                    MessageBox.Show("Commande terminée !", "Validation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
    ok pas de message d'erreur mais l'update ne s'effectue pas

    sinon le faite d'avoir mis co_sta dans le select sa me gene car il affiche une colonne co_sta alors que jle veux pas

  13. #33
    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
    ok pas de message d'erreur mais l'update ne s'effectue pas
    Ben c'est normal... tu ne réutilises pas la même DataTable, tu en crées une autre, qui, elle, n'est pas modifiée...

    Il faut que tu déclares le dataset comme membre de la classe, et non pas comme variable locale dans liste_Load

  14. #34
    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
    bah ouai mais la je suis perdu car j'ai mis du code dans le load car c'est au chargement de la fenêtre qu'il y a des choses a traiter si je le change de place comment je vais dire que mon code s'exécute au démarrage de la fenêtre ?

    membre de la classe c'est a dire ?

  15. #35
    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
    bah ouai mais la je suis perdu car j'ai mis du code dans le load car c'est au chargement de la fenêtre qu'il y a des choses a traiter si je le change de place comment je vais dire que mon code s'exécute au démarrage de la fenêtre ?
    J'ai seulement dit de sortir la déclaration du Load... l'initialisation, tu peux la laisser dedans

    Citation Envoyé par noobyyy Voir le message
    membre de la classe c'est a dire ?
    Y a quand même des limites... si tu as vraiment lu (et compris) le cours de Serge Tahé, tu devrais savoir ce que c'est. Fais une petite recherche... Je vais pas te faire un cours sur la programmation orientée objet, le forum ne sert pas à ça

  16. #36
    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
    membre de la classe a l'interieur quoi ? tu veux dire...


    sinon je fais les traitements dans le load et les déclarations a l'exterieur

  17. #37
    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
    membre de la classe a l'interieur quoi ? tu veux dire...
    euh... je comprends pas ta phrase

    Citation Envoyé par noobyyy Voir le message
    sinon je fais les traitements dans le load et les déclarations a l'exterieur
    c'est ça

  18. #38
    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
    déclarations à l'exterieur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            public DataSet dataset_commande = new DataSet();
            public DataSet dataset_termine = new DataSet();
    ce qui me donne d'une part:
    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
     
            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, 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);
     
                    MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter_commande_attente);
     
     
                    adapter_commande_attente.Fill(dataset_commande, "commande_attente");                
                    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);
                }
            }
    et d'autre part:
    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_attente = 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_attente.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_attente.Update(dataset_commande, "commande_attente");
                    MessageBox.Show("Commande terminée !", "Validation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
    ERREUR:
    Update requiert un UpdateCommand valide lors du passage de la collection DataRow avec des lignes modifiées.

  19. #39
    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
    C'est peut être un peu normal, vu que tu n'as positionné qu'un select ???

    Faudrait peut être vu ta requête spécifier la condition update...

    Extrait de la doc mysql :
    During System.Data.Common.DataAdapter.Update, if this property is not set and primary key information is present in the DataSet, the UpdateCommand can be generated automatically if you set the SelectCommand property and use the MySqlCommandBuilder.Then, any additional commands that you do not set are generated by the MySqlCommandBuilder. This generation logic requires key column information to be present in the DataSet.
    T'aurais pas un problème de clef par hazard ?

  20. #40
    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
    argh...
    j'avais pas vu, ta requête c'est une jointure entre plusieurs tables
    Dans ce cas le CommandBuilder ne marche pas, il faut que tu écrives toi-même les requêtes de mise à jour...

    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;
    (à ajouter après la création du dataAdapter, à la place du MySqlCommandBuilder)

    Citation Envoyé par noobyyy Voir le message
    déclarations à l'exterieur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            public DataSet dataset_commande = new DataSet();
            public DataSet dataset_termine = new DataSet();
    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)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 7 PremièrePremière 123456 ... 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