2009-07-15 4 views
1

J'ai un répéteur qui est databound à une base de données SQL. Pour accéder à l'information que je fais ce qui suit:Est-il possible de lister toutes les expressions de DataBinder.Eval()?

string Author = (string)DataBinder.Eval(e.Item.DataItem, "Author"); 

Il y a d'autres propriétés que je dois accès, mais je ne suis pas sûr de ce que leurs noms sont (expressions comme IntelliSense le dit?). Puis-je faire une boucle à travers le e.Item.DataItem et obtenir le nom de toutes les expressions?

J'ai déjà posé this question, en quelque sorte, mais je pense que je n'étais pas clair. Le résultat de ce poste m'a donné ce qui ressemble à la structure de la table de la base de données, pas les noms d'expression réels/valeurs:

UrlWithExtension [System.String] 
ThumbnailUrl [System.String] 
Content [System.Object] 
Language [System.String] 
// etc 

Obtenir les valeurs ne sont pas vraiment important, seulement les noms des expressions.

Merci!

Répondre

0

Je pense que vous pourriez faire référence à ce qu'on appelle des champs (essentiellement des variables qui sont déclarées au niveau de la classe et rendues publiques). Vous pouvez utiliser la même méthode que je fournis dans cet autre Q & un fil, avec une petite modification:

obj.GetType(). 
    GetFields(). 
    ToList(). 
    ForEach(p => 
     Console.WriteLine("{0} [{1}]", p.Name, p.FieldType.ToString() 
     )); 

Je ne pensais pas vraiment que quand je fait le code pour les propriétés, puisque je presque jamais exposer les champs publiquement dans mes classes. Lorsque j'ai besoin de savoir à quoi ressemble l'interface d'un objet, je trouve souvent qu'il est plus simple d'ajouter un point d'arrêt dans le débogueur et d'ajouter une montre pour examiner l'objet un peu plus près. Cela révélera tous les membres (non-méthode) et leurs types (et le contenu actuel aussi bien).

+0

Malheureusement, c'est pas. Quand j'exécute cela, je reçois une chaîne vide (j'ai légèrement modifié votre code pour ajouter le texte à un générateur de chaîne au lieu de le sortir sur la console) Merci pour votre contribution continue! – Anders

0

La réponse à votre autre message semble être la réponse à celui-ci aussi. Pour obtenir le « expresions » que vous cherchez, vous pouvez faire quelque chose comme ça ...

var props = e.Item.DataItem.GetType().GetProperties(); 

foreach (var item in props) 
{ 
    Console.WriteLine(string.Format("{0}:{1}", item.Name, DataBinder.Eval(e.Item.DataItem, item.Name))); 
} 

Cette boucle ira sur votre DataItem et saisir chaque propriété et la sortie de son nom et la valeur à la console. Si votre auteur n'apparaît pas dans la liste des résultats, il se peut qu'il ne s'agisse pas d'une propriété mais d'un champ public. Vous devriez donc également consulter GetFields() ou d'autres méthodes.

Exemple d'utilisation GetFields ...

var props = e.Item.DataItem.GetType().GetFields(); 

foreach (var item in props) 
{ 
    Console.WriteLine(string.Format("{0}:{1}", item.Name, DataBinder.Eval(e.Item.DataItem, item.Name))); 
} 
+0

Hmm, ça doit être autre chose. même résultat que le code de Fredrik, juste les valeurs réelles (ex: UrlWithExtension: ~/Libraries/Activation_Key/Activation_Key.sflb.ashx) au lieu du type :(. – Anders

+0

Avez-vous essayé avec GetFields() au lieu de GetProperties()? –

+0

Oui, cela renvoie une chaîne vide – Anders

Questions connexes