none
Mettre à jour ça table de donnée avec une datagridview RRS feed

  • Question

  • Bonjour,

    Dans mon programme j'ai mis une datagridview qui affiche une table de donnée.

    J'ai réussi a ajouter des éléments dans datagridview et ma base de donnée les reçois bien.

    Maintenant j'aimerais supprimer un éléments mais il me supprime visuellement mais la table de donnée ne ce met pas à jour :/

    voila mon code:

    //Ajouter un serveur
            private void button5_Click(object sender, EventArgs e)
            {
                if (textBox4.Text == "" && textBox3.Text == "")
                {
                    MessageBox.Show("Remplissez tous les champs !");
                }
                else
                {
                    using (var db = new DBserveurs())
                    {
                        var nom = textBox4.Text;
                        var prenom = textBox3.Text;
    
                        var UnServeur = new table_Serveurs { Noms = nom, Prenoms = prenom };
                        db.Serveur.Add(UnServeur);
                        db.SaveChanges();
                    }
                    this.table_ServeursTableAdapter.Fill(this._DigitalRestaurant_Serveurs_DBserveursDataSet.table_Serveurs); // rafraichissement de la base de donnée et de la datagridview1
                    dataGridView1.RefreshEdit();
                }
            }
    
            // supprimer un serveur
            private void button6_Click(object sender, EventArgs e)
            {
                if (textBox4.Text == "" && textBox3.Text == "")
                {
                    MessageBox.Show("Remplissez tous les champs !");
                }
                else
                {
                        DialogResult result;
                        result = MessageBox.Show("Voulez-vous vraiment supprimer ce serveur?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (result == DialogResult.Yes)
                        {    
                            using (var dbd = new DBserveurs())
                            {
                                    Int32 rowToDelete = this.dataGridView1.Rows.GetFirstRow(
                                    DataGridViewElementStates.Selected);
                                    if (rowToDelete > -1)
                                    {
                                        this.dataGridView1.Rows.RemoveAt(rowToDelete);
                                    }
                                    
                                    dbd.SaveChanges();
                                    dataGridView1.RefreshEdit();
                              }
                        }
                }
            }

    lundi 28 octobre 2013 11:10

Réponses

  • Avec toute l'aide que j'ai reçus voici le code finale et fonctionnelle ^^

    // supprimer un serveur
            private void button6_Click(object sender, EventArgs e)
            {
                        DialogResult result;
                        result = MessageBox.Show("Voulez-vous vraiment supprimer ce serveur?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (result == DialogResult.Yes)
                        {
                            using (var dbd = new DBserveurs())
                            {
                                DataRowView drv = (DataRowView)dataGridView1.SelectedRows[0].DataBoundItem;
                                DataRow row = drv.Row;
                                int aux = (int)row["Id"];
    
                                var serveur = (from supri in dbd.Serveur where supri.Id == aux select supri).Single();
                                dbd.Serveur.Remove(serveur);
                                dbd.SaveChanges();
                            }
                            this.table_ServeursTableAdapter.Fill(this._DigitalRestaurant_Serveurs_DBserveursDataSet.table_Serveurs);
                        }
            }

    Un grand merci pour votre aide ;)

    Cordialement

    Stiens Germain


    • Modifié Digitalismi vendredi 1 novembre 2013 11:16
    • Marqué comme réponse Aurel Bera vendredi 1 novembre 2013 11:24
    vendredi 1 novembre 2013 11:16

Toutes les réponses

  • Bonjour,

    je ne connais pas la classe que vous utilisez, mais vous n'utilisez pas la variable dbd. Il manque peut-être dbd.Remove(...) quelque part.


    Nimzozo, from France.

    lundi 28 octobre 2013 12:18
  • oui justement le remove je ne pense pas vraiment avoir bien compris sont fonctionnement
    lundi 28 octobre 2013 20:31
  • Bonjour,

    Pour supprimer votre ligne en base de données, vous devez rechercher l'entité "serveur" à supprimer en base, la marquer à supprimer et appeler la méthode SaveChanges() :

    using (var dbd = new DBserveurs())
    {
        var serveur = from e in dbd.Serveur
                      where e.Id = ((DataRow)this.dataGridView1.SelectedRows[0].DataBoundItem)["Id"]
                      select e;
        dbd.Serveur.DeleteObject(e);
        dbd.SaveChanges();
    }

    Corrigez si nécessaire le nom de la colonne qui est l'identifiant unique (j'ai choisi ici "Id").

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    lundi 28 octobre 2013 22:47
    Modérateur
  • Bonjour

    Si je comprends bien votre code, vous avez mélange EF avec des DataSets.
    Les deux sont techniques alternative, et je vous suggère de utiliser seulement une - par exemple ne plus utiliser le DataSet/DataAdapter mais  binder le datagrid a la liste des Serveurs.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 29 octobre 2013 13:58
  • je suis un peu perdu la :/

    j'ai essayé ce que Gilles TOURREAU ma partagé mais j'ai 4 erreurs, les voici :

    erreur-projet

    EN claire ce que j'essaye de faire pour le moment avec ma table de donnée c'est :

    Ajouter des serveurs dans ma table de donnée cela fonctionne.

    Modifier un serveur " pas encore regardé "

    Supprimer un serveur et la pour le moment je coince .

    Seriez-vous me dire vers quoi je devrais m orienter ?

    En vous remerciant

    Stiens Germain

    mardi 29 octobre 2013 15:10
  • Quand vous parlez de binder la gridview avec ma table cela veux dire que toutes modifications faite sur la data gridview ce modifie directement dans ma table de donnée?
    mardi 29 octobre 2013 15:14
  • Bonjour,

    Autant pour moi... Voilà la version corrigée :

    using (var dbd = new DBserveurs())
    {
        var serveur = (from e in dbd.Serveur
                      where e.Id == (int)(((DataRow)this.dataGridView1.SelectedRows[0].DataBoundItem)["Id"])
                      select e).Single();
        dbd.Serveur.DeleteObject(serveur);
        dbd.SaveChanges();
    }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mardi 29 octobre 2013 20:57
    Modérateur
  • var serveur = (from e in dbd.Serveur ...

    j'ai cette erreur suivante avec le " e " : elle est en conflit avec une autre variable " e " alors que je n'ai pas du tout de variable e si ce n est celle la .

    Pour le DeletObject, il faut une référence d'assembly ?

    Parce que j'ai toujours la même petite erreur pour cela.

    Cordialement

    mercredi 30 octobre 2013 12:27
  • Dans la définition vous avez :
     private void button6_Click(object sender, EventArgs e)

    C'est ce "e" qui produit le conflit. Vous devez seulement renommer un d'eux.

    Cordialement,

     

    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 30 octobre 2013 12:35
  • Merci pour votre réponse rapide.

    Pour le probleme avec DeletObjects, il y a un using à mettre?

    Sur msdn j'ai trouvé le using System.Data.Objects; mais il ne fonctionne pas.

    mercredi 30 octobre 2013 12:40
  • Essayez avec Remove en place de DeleteObject :

    http://msdn.microsoft.com/fr-fr/library/system.data.entity.dbset.remove(v=vs.113).aspx

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 30 octobre 2013 13:09
  • DialogResult result;
                        result = MessageBox.Show("Voulez-vous vraiment supprimer ce serveur?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (result == DialogResult.Yes)
                        {
                            using (var dbd = new DBserveurs())
                            {
                                var serveur = (from supri in dbd.Serveur where supri.Id == (int)(((DataRow)this.dataGridView1.SelectedRows[0].DataBoundItem)["Id"]) select supri).Single();
                                dbd.Serveur.Remove(serveur);
                                dbd.SaveChanges();
                            }
                        }    

    J'ai donc remplacé le DeltObject par remove et maintenant j'ai une erreur qui ce produit à cette ligne :

                                var serveur = (from supri in dbd.Serveur where supri.Id == (int)(((DataRow)this.dataGridView1.SelectedRows[0].DataBoundItem)["Id"]) select supri).Single();

    LINQ to Entities does not recognize the method 'System.Object get_Item(System.String)' method, and this method cannot be translated into a store expression.

    JE ne vois vraiment pas quoi faire et comment mi prendre

    mercredi 30 octobre 2013 13:31
  • Essayez de récupérer le contenu de (int)(((DataRow)this.dataGridView1.SelectedRows[0].DataBoundItem)["Id"]) dans une variable et l'utiliser après :

    aux = (int)(((DataRow)this.dataGridView1.SelectedRows[0].DataBoundItem)["Id"])

    et

    var serveur = (from  supri in dbd.Serveur where supri.Id  =aux..............

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 30 octobre 2013 13:59
  • J'ai toujours le même problème
    mercredi 30 octobre 2013 14:14
  • C’est normal d'avoir plusieurs Serveurs avec le même Id ?Le problème peut venir d'ici:

    http://www.c-sharpcorner.com/UploadFile/54db21/play-with-first-firstordefault-or-single-singleorde/

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 30 octobre 2013 14:39
  • il y a pas de serveurs avec le même Id

    l ajout fonctionne très et les Id aussi

    mercredi 30 octobre 2013 14:43
  • Donc pour les personnes qui suivent le sujet.

    Je suis toujours à la recherche du fonctionnement:

    Supprimer une ligne dans un datagridview et que cette ligne ce supprime également dans ma table de donnée.

    Cordialement

    mercredi 30 octobre 2013 15:12
  • Bonjour,

    Le code suivant ne fonnctionne pas ?

    using (var dbd = new DBserveurs())
    {
        var aux = (int)(((DataRow)this.dataGridView1.SelectedRows[0].DataBoundItem)["Id"]);
        var serveur = (from e in dbd.Serveur
                      where e.Id == aux
                      select e).Single();
        dbd.Serveur.Remove(serveur);
        dbd.SaveChanges();
    }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mercredi 30 octobre 2013 22:22
    Modérateur
  • non j'ai une erreur il y a un conflit, mais je ne trouve pas ce type d erreur dans la msdn :/

    jeudi 31 octobre 2013 09:39
  • Bonjour

    Si vous changes  (du memoire):

    DataRowView drv = (DataRowView)dataGridView1.SelectedRows[0].DataBoundItem;
    DataRow row = drv.Row;
    int aux = (int)row["Id"];

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    jeudi 31 octobre 2013 10:45
  • Dans le contexte actuel ça ne changera rien, j'ai quand même essayé mais non.

    C'est la même chose

    jeudi 31 octobre 2013 10:56
  • Quel est le message d'erreur?

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 31 octobre 2013 11:09
  • J'ai le même message d'erreur " sur le dernier screen que j'avais partagé "

    Cordialement

    jeudi 31 octobre 2013 12:45
  • J'ai corrigé le code :

     DataRowView drv = (DataRowView)dataGridView1.SelectedRows[0].DataBoundItem;
    DataRow row = drv.Row;
    int aux = (int)row["Id"];

    Vous avez le même problème car une erreur de syntaxe a arête la compilation.

    Cordialement,



    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.



    jeudi 31 octobre 2013 13:04
  • désolé mais ça fonctionne pas du tout, je pense que le code de Gille Tourreau est bon mais j'ai un petit souci quelque pars :s

    using (var dbd = new DBserveurs())
    {
        var aux = (int)(((DataRow)this.dataGridView1.SelectedRows[0].DataBoundItem)["Id"]);
        var serveur = (from e in dbd.Serveur
                      where e.Id == aux
                      select e).Single();
        dbd.Serveur.Remove(serveur);
        dbd.SaveChanges();
    }

    Parce que vos codes sont exactement les même juste présenté d'une manière différentes et j'obtiens toujours le même problème.
    Il me manque peut être un using ?

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.Entity;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    encore merci pour votre aide

    cordialement

    jeudi 31 octobre 2013 13:27
  • Non, si j'ai bien compris le probleme vous devez modifier le code comme ca:

    using (var dbd = new DBserveurs())
    {  
    DataRowView drv = (DataRowView)dataGridView1.SelectedRows[0].DataBoundItem;
    DataRow row = drv.Row;
    int aux = (int)row["Id"];
    
        var serveur = (from e in dbd.Serveur                  
    where e.Id ==                   aux
    select e).Single();
        dbd.Serveur.Remove(serveur);
        dbd.SaveChanges();
    }
    

    Cordialement,

    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 31 octobre 2013 13:44
  • Avec toute l'aide que j'ai reçus voici le code finale et fonctionnelle ^^

    // supprimer un serveur
            private void button6_Click(object sender, EventArgs e)
            {
                        DialogResult result;
                        result = MessageBox.Show("Voulez-vous vraiment supprimer ce serveur?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (result == DialogResult.Yes)
                        {
                            using (var dbd = new DBserveurs())
                            {
                                DataRowView drv = (DataRowView)dataGridView1.SelectedRows[0].DataBoundItem;
                                DataRow row = drv.Row;
                                int aux = (int)row["Id"];
    
                                var serveur = (from supri in dbd.Serveur where supri.Id == aux select supri).Single();
                                dbd.Serveur.Remove(serveur);
                                dbd.SaveChanges();
                            }
                            this.table_ServeursTableAdapter.Fill(this._DigitalRestaurant_Serveurs_DBserveursDataSet.table_Serveurs);
                        }
            }

    Un grand merci pour votre aide ;)

    Cordialement

    Stiens Germain


    • Modifié Digitalismi vendredi 1 novembre 2013 11:16
    • Marqué comme réponse Aurel Bera vendredi 1 novembre 2013 11:24
    vendredi 1 novembre 2013 11:16
  • Merci de votre retour.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 1 novembre 2013 11:25