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

ASP.NET Discussion :

Problème de type pour un Container.DataItem


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 13
    Points
    13
    Par défaut Problème de type pour un Container.DataItem
    Bonjour, je rencontre un problème pour récupérer le contenu d'un Container.DataItem. Je pense que ca doit etre un problème de conversion de type mais je ne trouve pas. Mon champs dans DB est un int.
    Voici ce que je tente d'afficher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:Label ID="Label1" runat="server" Text='<%# (Container.DataItem as DTO.BookEntity).ISBN %>'></asp:Label>
    Merci pour votre aide.

  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 : 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
    Déjà n'utilise pas as mais plutôt un cast, sinon ça te fait une NullReferenceException qui aide pas vraiment à voir ce qui se passe...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Label ID="Label1" runat="server" Text='<%# ((DTO.BookEntity)Container.DataItem).ISBN %>'></asp:Label>
    Si c'est effectivement un problème de conversion, ça devrait te donner une InvalidCastException avec un message du type "Impossible de convertir de 'X' vers 'DTO.BookEntity'". Regarde ce qu'il met à la place de 'X' dans le message...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    merci pour ta réponse.

    En effet, ce n'est peut-être pas un problème de conversion. En fait à la place de me renvoyer mon code ISBN il me met un 0. Je me suis trompé, mon code ISBN est bien en varchar.

    J'ai essayé le code que tu propose, mais cela ne change rien.

  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 : 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 Subteranea Voir le message
    J'ai essayé le code que tu propose, mais cela ne change rien.
    Ce n'était pas supposé régler le problème, c'était juste pour essayer de préciser le problème de conversion si c'en était un...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Cela ne change rien, il m'affiche toujours 0 à la place de mon code ISBN.

  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 : 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 Subteranea Voir le message
    Cela ne change rien, il m'affiche toujours 0 à la place de mon code ISBN.
    Bah oui, tu l'as déjà dit, mais ça fait pas vraiment avancer le schmilblick...

    Avec le code que tu as donné, c'est difficile de déterminer ce qui pose problème... Si ça affiche 0, c'est que ISBN vaut 0. Le problème n'est visiblement pas dans le code que tu as montré, mais à un autre niveau. D'où vient ton objet DTO.BookEntity ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    En fait c'est ma class qui se présente comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class BookEntity
        {
            public string IdProduit { get; set; }
            public string ISBN { get; set; }
            public string Titre { get; set; }
            public string Auteur { get; set; }
            public string Catégorie { get; set; }
            public decimal Prix { get; set; }
            public string CD { get; set; }
            public string DateParution { get; set; }
            public string NbPages { get; set; }
        }
    Ce qui est étonnant c'est que sur ma page, j'affiche le titre, le nom de l'auteur... sans problème.

  8. #8
    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 Subteranea Voir le message
    En fait c'est ma class qui se présente comme ceci :
    OK, mais comment est créé l'objet ? Chargé par Entity Framework je suppose ? Tu es sûr que les données sont correctes dans la DB ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    En fait je me base sur le Tuto de Immobilis (http://immobilis.developpez.com/arti...ouche-asp-net/) L'architecture multicouche (BLL - DTO - DAL).

    Oui, j'ai vérifié mes données sont correctement encodée dans ma DB.

  10. #10
    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 Subteranea Voir le message
    En fait je me base sur le Tuto de Immobilis (http://immobilis.developpez.com/arti...ouche-asp-net/) L'architecture multicouche (BLL - DTO - DAL).
    OK, donc le problème est peut-être au niveau du chargement des données alors... peux-tu montrer le code où tu copies les données du DataReader vers le DTO ?

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Ok, en fait j'avais oublié de récupérer l'ISBN dans mon DataReader.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Book.ISBN = rdr["ISBN"] == DBNull.Value ? string.Empty : rdr["ISBN"].ToString();
    Le code complet étant :

    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 List<BookEntity> LoadData()
            {
                List<BookEntity> list = new List<BookEntity>();
     
                using (SqlConnection cn = new SqlConnection())
                {
                    cn.ConnectionString = ConfigurationManager.ConnectionStrings["DBLibrary"].ConnectionString;
                    cn.Open();
     
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        cmd.CommandText = "Select * from [ouvrages]";
                        cmd.Connection = cn;
     
                        using (SqlDataReader rdr = cmd.ExecuteReader())
                        {
                            while (rdr.Read())
                            {
                                BookEntity Book = new BookEntity();
                                Book.IdProduit = rdr["IdProduit"] == DBNull.Value ? string.Empty : rdr["IdProduit"].ToString();
                                Book.Titre = rdr["Titre"] == DBNull.Value ? string.Empty : rdr["Titre"].ToString();
                                Book.ISBN = rdr["ISBN"] == DBNull.Value ? string.Empty : rdr["ISBN"].ToString();
                                Book.Auteur = rdr["Auteur"] == DBNull.Value ? string.Empty : rdr["Auteur"].ToString();
     
                                list.Add(Book);
                            }
                        }
                    }
                }
     
                return list;
            }
    Du coup, mon ISBN s'affiche.

    Merci pour ton aide !

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Par contre je rencontre là un problème de conversion de type je pense avec mon prix qui est en decimal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Book.Prix = rdr["Prix"] == DBNull.Value ? string.Empty : rdr["Prix"].ToString();
    je ne vois pas comment le convertir.

  13. #13
    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 Subteranea Voir le message
    Par contre je rencontre là un problème de conversion de type je pense avec mon prix qui est en decimal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Book.Prix = rdr["Prix"] == DBNull.Value ? string.Empty : rdr["Prix"].ToString();
    je ne vois pas comment le convertir.
    Si le prix peut être null, il faut déjà le déclarer comme nullable (decimal? ou Nullable<decimal>, les 2 syntaxes sont équivalentes)

    Ensuite tu fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Book.Prix = rdr.IsDBNull("Prix") ? (decimal?)null : (decimal)rdr["Prix"];
    Si ça peut pas être null, fais simplement ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Book.Prix = (decimal)rdr["Prix"];
    (soit dit en passant, c'est pas très propre d'utiliser ToString pour convertir en string, il vaut mieux faire un cast)

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Mes produits ne s'affichent plus sur ma page mais je ne vois pas pourquoi.
    Je crois que je vais reprendre mon code à tête reposé demain.

    Merci

  15. #15
    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 Subteranea Voir le message
    Mes produits ne s'affichent plus sur ma page mais je ne vois pas pourquoi.
    Tu as seulement modifié ce que je t'ai dit pour le prix ?
    Regarde si tu n'as pas une exception (coche la case à cocher "Levé" dans le dialogue Déboguer > Exceptions pour que le debugger s'arrête quand il y a une exception)

  16. #16
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    j'ai trouvé ce qui ne fonctionnait plus. A force de chipoter j'avais supprimé list.Add(Book); qui me permettait de remplir ma liste. Donc c'est normal qu'il ne m'affichait plus rien si il n'y avait plus rien dans ma liste.

    Encore merci pour ton aide.

  17. #17
    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 Subteranea Voir le message
    j'ai trouvé ce qui ne fonctionnait plus. A force de chipoter j'avais supprimé list.Add(Book); qui me permettait de remplir ma liste. Donc c'est normal qu'il ne m'affichait plus rien si il n'y avait plus rien dans ma liste.
    Arf, j'y avais pensé en plus, et puis je me suis dit "non, c'est un peu gros"...

  18. #18
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    C'est souvent les erreurs les plus grosses qu'on repère le moins vite. Et puis je commençait sans doute à fatiguer hier soir.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/12/2009, 22h29
  2. Problème correspondance de types pour Webservice
    Par LamHM dans le forum Websphere
    Réponses: 0
    Dernier message: 22/06/2009, 10h15
  3. Réponses: 11
    Dernier message: 12/03/2008, 16h25
  4. Problème de requête pour une relation de type n-n
    Par toutoune60 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/03/2007, 15h41

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