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 :

LINQ, type anonyme et databinding


Sujet :

ASP.NET

  1. #1
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut LINQ, type anonyme et databinding
    Bonjour tout le monde.

    Je suis en train de faire une ptite gestion d'alerte sonore pour un site web.
    J'ai un dossier /sound avec différents .wav.
    Mon but est de lister dans une page et de permettre au user d'en sélectionner un.

    J'ai pour ça un Repeater que je bind avec la requête LINQ suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var path = Server.MapPath("Sounds");
                var query = from f in Directory.GetFiles(path)
                            select new { libelle = System.IO.Path.GetFileName(f), shortlibelle = System.IO.Path.GetFileName(f).Substring(0, System.IO.Path.GetFileName(f).IndexOf(".")) };
     
                rpSounds.DataSource = query;
                rpSounds.DataBind();
    J'ai donc un objet de type anonyme avec 2 propriétés: libelle et shortlibelle.

    Dans l'événement ItemDataBound de mon repeater, j'ai besoin de récupérer la valeur de ses propriétés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected void rpSounds_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                var lib = e.Item.DataItem.???;
     
     
            }
    e.Item.DataItem est de type anonyme. Comment accéder à ses propriétés?

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    J'ai une solution qui marche en passant par une classe Sound:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Sound
        {
            public string libelle { get; set; }
            public string shortlibelle { get; set; }
        }
    Dans ma requête LINQ, je crée des objets de type Sound plutot que de type anonyme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var query = from f in Directory.GetFiles(path)
                            select new Sound { libelle = System.IO.Path.GetFileName(f), shortlibelle = System.IO.Path.GetFileName(f).Substring(0, System.IO.Path.GetFileName(f).IndexOf(".")) };
    Et dans le ItemDataBound, je cast en Sound:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var lib = ((Sound) e.Item.DataItem).shortlibelle;
    Ca fonctionne parfaitement.
    Mais est-ce qu'il existe un moyen de ne pas passer par cette classe intermédiaire?

  3. #3
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut
    T'as testé avec le Eval ("Libellé") sur la page même ? J'avoue que j'ai jamais testé avec une classe anonyme mais à mon avis si tu connais le nom des champs ca devrait aller...

    Sinon tu pourrai également utiliser la propriété CommandArgument dans le BoundField du repeater et recuperer côté Behind la valeur ...

    Dis nous quoi si ca fonctionne .
    L'homme est prédestiné à l'objet de ses propres choix .

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2015, 21h49
  2. linq et reporting services - types anonymes
    Par boby62423 dans le forum Linq
    Réponses: 0
    Dernier message: 03/02/2009, 12h06
  3. [C# 3]Passer un type anonyme à une fonction
    Par NicolasJolet dans le forum C#
    Réponses: 2
    Dernier message: 10/09/2008, 16h17
  4. Linq, type anonyme et redondance
    Par neptune dans le forum Framework .NET
    Réponses: 2
    Dernier message: 25/06/2008, 10h49
  5. [collection] Type anonyme + IEnumerable
    Par ZaaN dans le forum C#
    Réponses: 6
    Dernier message: 08/04/2008, 15h03

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