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

Windows Forms Discussion :

Modifier/Ajouter/Supprimer des données directements dans un datagridview


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut Modifier/Ajouter/Supprimer des données directements dans un datagridview
    Bonsoir,

    Est-ce que quelqu'un aurait un tuto/bonne explication sur comment faire la modifications, suppression ou ajout de cellules dans un datagridview?

    Je suis actuellement en train de voir comment cela ce fait mais je n'arrive pas à trouver de l'info dessus (probablement parce que je ne sais pas quelle propriété fait ce dont je veux)

    Merci bien et bonne soirée

    L.

  2. #2
    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 : 44
    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
    La méthode "crade" pour modifier une valeur d'une cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DataGridView.Rows[indexLigne]["nomColonne"].Value = laValeur;
    // ou encore:
    dataGridView1.Rows[indexLigne][indexColonne].Value = laValeur;
    Tu ne peux pas ajouter ou supprimer une cellule individuelle, seulement une ligne entière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // ajout
    int indexLigne = dataGridView1.Rows.Add();
     
    // suppression
    dataGridView1.Rows.RemoveAt(indexLigne);
    La méthode propre, c'est d'utiliser le DataBinding. Tu associes à ton DataGridView une source de données (propriété DataSource), qui peut être par exemple une DataTable (le plus simple) ou une liste d'objets. Pour modifier le contenu du DataGridView, tu modifies la source de données, qui notifie le DataGridView pour qu'il se mette à jour.

    Pour une DataTable, ça marche tout seul : tu modifies les valeurs, tu ajoutes/supprimes des lignes de la table, et la grille se met à jour en fonction de ça.

    Pour une liste d'objets c'est un peu plus complexe :
    - les objets de la liste doivent implémenter INotifyPropertyChanged pour déclencher un évènement quand une valeur de propriété change (sinon le DataGridView ne pourra pas le savoir)
    - la liste elle-même doit implémenter IBindingList, pour déclencher un évènement quand la liste change (ajout ou suppression d'éléments). Le plus simple est d'utiliser la classe BindingList<T> qui gère déjà tout ça

    A noter : le databinding fonctionne dans les 2 sens. Si le DataGridView est éditable, les modifications faites par l'utilisateur sont répercutées sur la source de données.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Ce que tu propose marche quand l'utilisateurs rentre directement les données dans la DataGridView?

  4. #4
    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 : 44
    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 Leelith Voir le message
    Ce que tu propose marche quand l'utilisateurs rentre directement les données dans la DataGridView?
    C'est à dire ? J'en ai parlé dans le dernier paragraphe de ma réponse, qu'est-ce qui te manque ?

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Ce que tu propose marche quand l'utilisateurs rentre directement les données dans la DataGridView?
    Honnetement, abandonne cette idée.

    Sauf cas particuliers très simple, saisir directement dans le DataGridView conduit à toute une série de problèmes dont je n'ai pu me dépatouiller (après 6 semaines de travail et 2 versions de ma bibli à la poubelle ) qu'en créant des boutons d'ajout/suppression/modification et en faisant la saisie dans un panel présentant un seul enregistrement.

  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 : 44
    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 Graffito Voir le message
    Honnetement, abandonne cette idée.

    Sauf cas particuliers très simple, saisir directement dans le DataGridView conduit à toute une série de problèmes dont je n'ai pu me dépatouiller (après 6 semaines de travail et 2 versions de ma bibli à la poubelle ) qu'en créant des boutons d'ajout/suppression/modification et en faisant la saisie dans un panel présentant un seul enregistrement.
    Je ne suis absolument pas d'accord... J'ai travaillé pendant deux ans sur une appli qui faisait un usage massif du DataGridView, la saisie se faisant directement dans la grille. Ca a toujours fonctionné sans problème, aussi bien dans des cas simples que pour des scénarios très complexes.

    Le contrôle DataGridView est prévu pour ce genre de choses, si tu n'as pas réussi à t'en servir, c'est que tu t'y es mal pris... Evite donc de rejeter la faute sur ce malheureux contrôle qui n'a rien demandé et rend de grands services à des milliers de développeurs

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Citation Envoyé par tomlev Voir le message
    C'est à dire ? J'en ai parlé dans le dernier paragraphe de ma réponse, qu'est-ce qui te manque ?
    En faite, je n'ai pas trop d'idée de que faire lorsqu'un utilisateur rentre une nouvelle ligne ou en modifie/supprime une.

    Qu'elle est la méthode à utiliser dans le dataset pour faire le traitement nécessaire déclenché par l'action de l'utilisateur notamment?
    Parce que conscernant la mise à jour ça n'est pas un problème, il suffit de prendre les données modifiée du dataset et les répercuter dans mes fichiers XML (dailleurs est-ce qu'il y a un moyen de faire ça spécifique aux fichiers XML?)

  8. #8
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Qu'elle est la méthode à utiliser dans le dataset pour faire le traitement nécessaire déclenché par l'action de l'utilisateur notamment?
    Les event pertinents sont entre autres :
    • RowsAdded
    • RowsRemoved
    • RowValidated
    • RowValidating
    La DataTable à laquelle le DataGridView est bindé, est mise à jour automatiquement par l'édition du DataGridView (enfin quand la modification est "validée" ...).

    Si on veut metttre à jour la DataBase associée, on pourra utiliser DataAdater.Update() et DataTable.AcceptChanges().

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

Discussions similaires

  1. [AC-2003] Est-il possible de modifier en vba des données contenues dans un module ?
    Par elgordopresto dans le forum Access
    Réponses: 2
    Dernier message: 22/01/2015, 12h46
  2. [XL-2010] Supprimer des données filtrées dans un tableau
    Par virginie2 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/10/2014, 08h57
  3. [MySQL] Modifier et supprimer des données dans une base
    Par amandev dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/03/2012, 15h33
  4. Réponses: 2
    Dernier message: 25/08/2008, 10h41
  5. Réponses: 1
    Dernier message: 30/05/2007, 15h51

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