Partage
  • Partager sur Facebook
  • Partager sur Twitter

Impossible d'effectuer un cast d'un objet

entity framework

Sujet résolu
    14 mars 2019 à 13:06:18

    Bonjour , Voila sa fais plusieurs jour que j'essaye de résoudre mon problème or après plusieurs recherche je ne parviens toujours pas a le résoudre je souhaite supprimer la ligne sélectionner de mon datagrid et j'obtiens le message d'erreur suivant "Impossible d'effectuer un cast d'un objet "

    je vous mais ici comment je remplie mon datagrid et comment j’essaye de supprimer ma ligne sélectionner 

     public List<Rdv> GetAllRdv()
            {
                dbRdv.Clear();
                List<Rdv.DataBindingProjection> query = pages.rendez_vous.rendez_vous.contextModif.RDV 
                                  .Include(s => s.id)
                                  .Select(s => new Rdv.DataBindingProjection
                                  {
                                      heure = s.heure,
                                      date = s.date,
                                      adresse = s.adresse,
                                      cp = s.cp,
                                      ville = s.ville,
                                      description = s.description,
                                      nom = s.CLIENTS.nom,
                                      prenom = s.CLIENTS.prenom,
                                      type = s.CLIENTS.type,
                                  }).ToList();
                                pages.rendez_vous.rendez_vous.DataGridRdv.ItemsSource = query;
                return dbRdv;
            } 
    private void ButtonSupprimer_Click(object sender, RoutedEventArgs e)
            {
                if (rDVDataGrid.SelectedItems.Count >= 1)
                {
                    RDV rdv = new RDV();
                    for (int i = 0; i < rDVDataGrid.SelectedItems.Count; i++)
                    {
    
                        rendez_vous.contextModif.RDV.Remove((RDV)rendez_vous.DataGridRdv.SelectedItems[i]);
    
                    }
                     context.SaveChanges();
                    rDVDataGrid.ItemsSource = context.CLIENTS.ToList();
                }
                else
                {
                    MessageBox.Show("Vous devez selectionner un ou pluseurs rendez-vous pour pouvoir le Supprimer !");
                }
            }




    • Partager sur Facebook
    • Partager sur Twitter
      15 mars 2019 à 7:50:44

      Bonjour,

      Sauriez vous nous indiquer à quelle ligne l'erreur apparaît ?

      • Partager sur Facebook
      • Partager sur Twitter
        15 mars 2019 à 9:42:21

        NextrieSH a écrit:

        Bonjour,

        Sauriez vous nous indiquer à quelle ligne l'erreur apparaît ?

        Bonjour , voici une capture d'écran :



        -
        Edité par Altx 15 mars 2019 à 13:15:06

        • Partager sur Facebook
        • Partager sur Twitter
          15 mars 2019 à 14:02:12

          C'est dans le message d'erreur : Vous ne pouvez pas convertir un "DataBindingProjection" en "RDV".

          La DataGrid n'a pas les fonctionnalités de suppression qui mettent directement à jour le "context" ?

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            15 mars 2019 à 14:45:48

            bacelar a écrit:

            C'est dans le message d'erreur : Vous ne pouvez pas convertir un "DataBindingProjection" en "RDV".

            La DataGrid n'a pas les fonctionnalités de suppression qui mettent directement à jour le "context" ?

            Non Le DataGrid n'a pas les fonctionnalités de suppression qui mettent directement à jour le context.

            Auriez vous une idée de comment je pourrais procéder pour résoudre ce probléme?

            • Partager sur Facebook
            • Partager sur Twitter
              15 mars 2019 à 14:56:11

              Ok.

              Mais si vous avez une clé primaire, c'est assez trivial, et pas besoin de cast.

              https://stackoverflow.com/questions/35371534/delete-row-in-datagridview-and-database

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                15 mars 2019 à 16:51:04

                bacelar a écrit:

                Ok.

                Mais si vous avez une clé primaire, c'est assez trivial, et pas besoin de cast.

                https://stackoverflow.com/questions/35371534/delete-row-in-datagridview-and-database

                Je viens de regardé votre lien or cela ne peux pas fonctionner pour mon cas je pense , le problème et que j'affiche mes donnée de mon datagrid avec une requête et un select new pour afficher des donnée de deux table dans mon datagrid jusqu'ici tout va bien. J'arrive a faire l'ajout , mais en ce qui concerne la modification et la suppression je n'y parviens pas. j'ai systématiquement la même erreur qui je pense viens que je veux effectuer des actions directement sur mon context or je ne passe plus par celui ci je pense 

                • Partager sur Facebook
                • Partager sur Twitter
                  15 mars 2019 à 17:34:40

                  Pourquoi ça ne fonctionnerait pas ?

                  Essaye de récupérer l'objet dans un premier temps (en utilisant les données de ta DGV ) ensuite remove le.

                  Et sinon, en essayant d'utiliser ce truc, ça marche pas ?

                  -
                  Edité par LilyKianii 15 mars 2019 à 17:40:45

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 mars 2019 à 18:17:48

                    LilyKianii a écrit:

                    Pourquoi ça ne fonctionnerait pas ?

                    Essaye de récupérer l'objet dans un premier temps (en utilisant les données de ta DGV ) ensuite remove le.

                    Et sinon, en essayant d'utiliser ce truc, ça marche pas ?

                    -
                    Edité par LilyKianii il y a 3 min

                    le lien que tu ma envoyer j'ai essayer et cela ne fonctionne pas 

                    Voici mon nouveau test cette fois si je ne sais pas si cela fonctionne car il ne se passe rien 

                      private void ButtonSupprimer_Click(object sender, EventArgs e)
                            {
                                if (rDVDataGrid.SelectedItems.Count >= 1)
                                {
                                    RDV rdv = new RDV();           
                                        List<classes.Rdv.DataBindingProjection> rdve = new List<classes.Rdv.DataBindingProjection>();
                                        for (int i = 0; i < rDVDataGrid.SelectedItems.Count; i++)
                                        {
                                            rdve.Add((classes.Rdv.DataBindingProjection)rDVDataGrid.SelectedItems[i]);
                                        }
                                        var kk = rDVDataGrid.ItemsSource as List<classes.Rdv.DataBindingProjection>;
                                        foreach (var item in rdve)
                                        {
                                             kk.Remove(item);
                                            //context.t_clients.Remove(item);
                                        }
                                        //t_clientsDataGrid.Items.Refresh();
                                        
                                    
                                 //   context.SaveChanges();
                                  //  rDVDataGrid.ItemsSource = context.CLIENTS.ToList();
                                    listRdv.Clear();
                                    listRdv = classes.Database.GetDb().GetAllRdv();
                                    rendez_vous.DataGridRdv.Items.Refresh();
                                }

                    -
                    Edité par Altx 15 mars 2019 à 18:26:41

                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 mars 2019 à 19:10:15

                      Vous n'avez pas lu ou compris la Q&A dont j'ai fourni l'URL (en même temps, c'est pas une Q&A pile-poil sur le sujet).

                      Justement, dans la Q&A, il ne supprime pas l'objet ligne trouvé dans la grille, il ne récupère que la valeur de la clé primaire, et l'utilise pour chercher la ligne, non pas dans la DataSource de la grille mais directement dans le DataContext.

                      C'est donc une très petite modification dans votre code, si vous avez une clé primaire dans votre "RDV".

                      -
                      Edité par bacelar 18 mars 2019 à 8:48:51

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                        16 mars 2019 à 13:46:37

                        bacelar a écrit:

                        Vous n'avez pas lu ou compris la Q&A dont j'ai fourni l'URL (en même temps), c'est pas une Q&A pile-poil sur le sujet.

                        Justement, dans la Q&A, il ne supprime pas l'objet ligne trouvé dans la grille, il ne récupère que la valeur de la clé primaire, et l'utilise pour chercher la ligne, non pas dans la DataSource de la grille mais directement dans le DataContext.

                        C'est donc une très petite modification dans votre code, si vous avez une clé primaire dans votre "RDV".

                        J'arrive désormais a supprimer ma ligne sélectionné, mais le problème c'est que la suppression ce fais que sur le datagrid il faudrait que sa me supprime ma ligne également dans ma bdd. Une petite idée sur comment faire ? 

                          private void ButtonSupprimer_Click(object sender, EventArgs e)
                                {
                                    if (rDVDataGrid.SelectedItems.Count >= 1)
                                    {
                        
                                     
                                        for (int i = 0; i < rDVDataGrid.SelectedItems.Count; i++)
                                        {
                                            listRdv.Add((classes.Rdv.DataBindingProjection)rDVDataGrid.SelectedItems[i]);
                                        }
                                        var kk = rDVDataGrid.ItemsSource as List<classes.Rdv.DataBindingProjection>;
                                        foreach (var item in listRdv)
                                        {
                                            kk.Remove(item);
                                            //  context.RDV.Remove(item);
                                        }
                                        rDVDataGrid.Items.Refresh();
                                        context.SaveChanges();
                        
                                    }





                        -
                        Edité par Altx 16 mars 2019 à 13:47:13

                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 mars 2019 à 8:50:53

                          Pourquoi ne pas les supprimer directement du contexte, comme fait dans le lien que j'ai donné ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                            18 mars 2019 à 10:31:36

                            bacelar a écrit:

                            Pourquoi ne pas les supprimer directement du contexte, comme fait dans le lien que j'ai donné ?

                            car je peuple mon datagrid comme ceci : 

                              var query =
                                        from cli in pages.rendez_vous.rendez_vous.contextModif.CLIENTS
                                        join rdv in pages.rendez_vous.rendez_vous.contextModif.RDV on cli.id equals rdv.idClients
                                        select new classes.Rdv.DataBindingProjection 
                                        {
                                            heure = rdv.heure,
                                            date = rdv.date,
                                            adresse = rdv.adresse,
                                            cp = rdv.cp,
                                            ville = rdv.ville,
                                            description = rdv.description,
                                            nom = cli.nom,
                                            prenom = cli.prenom,
                                            type = cli.type
                                        };
                                        pages.rendez_vous.rendez_vous.DataGridRdv.ItemsSource = query.ToList();

                            et donc quand je souhaite supprimer directemet du context comme ceci :

                             private void ButtonSupprimer_Click(object sender, EventArgs e)
                                    {
                                        if (rDVDataGrid.SelectedItems.Count >= 1)
                                        {
                            
                                            for (int i = 0; i < rDVDataGrid.SelectedItems.Count; i++)
                                            {
                            
                                                pages.rendez_vous.rendez_vous.contextModif.RDV.Remove((RDV)rDVDataGrid.SelectedItems[i]);
                            
                                            }
                                            context.SaveChanges();
                                 
                                        }

                            j'obtient l'erreur suivante : 





                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 mars 2019 à 13:48:53

                              C'est quoi ce "contextModif" ?

                              Comme indiquer, vous utilisez la clé primaire récupérée dans la ligne du DataGrid pour rechercher l'objet à supprimer dans le context, DIRECTEMENT.

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                18 mars 2019 à 17:55:59

                                bacelar a écrit:

                                C'est quoi ce "contextModif" ?

                                Comme indiquer, vous utilisez la clé primaire récupérée dans la ligne du DataGrid pour rechercher l'objet à supprimer dans le context, DIRECTEMENT.

                                Je te remercie de ton aide , contexModif c'est le context de ma page rendez-vous.Le seule problème maintenant c'est que je n'arrive pas a récupérer l'id de ma ligne sélectionner, pour info je laisse gérer la bdd l'id de ma table rdv. Sinon j'ai essayer de passer l'id en dur et cela supprime correctement. aurais tu une idée de comment je pourrais faire pour récupérer l'id ?

                                -
                                Edité par Altx 18 mars 2019 à 18:05:19

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 mars 2019 à 19:55:09

                                  C'est quel champ de votre "Rdv.DataBindingProjection" qui contient la clé primaire/id ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                    18 mars 2019 à 20:04:57

                                    bacelar a écrit:

                                    C'est quel champ de votre "Rdv.DataBindingProjection" qui contient la clé primaire/id ?

                                    c'est le champ id:

                                     public class   DataBindingProjection
                                            {
                                                public int id { get; set; }
                                                public int idClient { get; set; }
                                                public string date { get; set; }
                                                public string heure { get; set; }
                                                public string adresse { get; set; }
                                                public string ville { get; set; }
                                                public int? cp { get; set; }
                                                public string description { get; set; }
                                                public string prenom { get; set; }
                                                public string type { get; set; }
                                                public string nom { get; set; }
                                            }





                                    -
                                    Edité par Altx 18 mars 2019 à 20:10:06

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 mars 2019 à 20:28:28

                                      Vous n'avez donc pas à "caster" votre ligne.

                                      Vous récupérez l'id de la ligne dans le champ "id" de votre "DataBindingProjection", vous utilisez cet id pour récupérer l'objet de type RDV dans le "context" et vous appelez la méthode statique "Remove" en passant cet objet RDV trouvé dans le "context".

                                      Après "Remove", c'est pas forcément le top :

                                      https://stackoverflow.com/questions/17723626/entity-framework-remove-vs-deleteobject

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                        20 mars 2019 à 17:52:59

                                        bacelar a écrit:

                                        Vous n'avez donc pas à "caster" votre ligne.

                                        Vous récupérez l'id de la ligne dans le champ "id" de votre "DataBindingProjection", vous utilisez cet id pour récupérer l'objet de type RDV dans le "context" et vous appelez la méthode statique "Remove" en passant cet objet RDV trouvé dans le "context".

                                        Après "Remove", c'est pas forcément le top :

                                        https://stackoverflow.com/questions/17723626/entity-framework-remove-vs-deleteobject


                                        Je te remercie tu ma beaucoup aider, si remove est pas forcément le top tu me conseillerais de faire comment sinon ? et pourquoi se n'est pas forcément le top ? 

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          20 mars 2019 à 18:09:22

                                          >et pourquoi se n'est pas forcément le top ?

                                          cf. le lien que j'ai donné à la fin du post.

                                          Remove vs DeleteObject, c'est fonction des contraintes d'intégrité des colonnes de la table stockant les "RDV".

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                                          Impossible d'effectuer un cast d'un objet

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          • Editeur
                                          • Markdown