2009-07-15 5 views
0

J'ai ce code-behind qui vérifie chaque élément dans un répéteur quand il est databound pour voir si l'auteur/date sont vides (aucun auteur/date, ou le système est configuré pour ne pas les afficher) de sorte que je peux effacer leurs étiquettes respectives. C'est ainsi que je ne reçois pas quelque chose comme "Posté par sur" quand il n'y a pas d'auteur et/ou la date spécifiée.Est-il possible de récupérer des noms de propriété à partir d'un élément de databound?

Voici le code:

protected void Page_Load(object sender, EventArgs e) 
{ 
    repeater.ItemDataBound += new RepeaterItemEventHandler(repeater_ItemDataBound);  
} 

void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Literal PostedBy = (Literal)e.Item.FindControl("litPostedBy"); 
     Literal PostedOn = (Literal)e.Item.FindControl("litPostedOn"); 
     string Author = (string)DataBinder.Eval(e.Item.DataItem, "Author"); 
     string Date = (string)DataBinder.Eval(e.Item.DataItem, "PubDate"); 

     if (string.IsNullOrEmpty(Author)) 
     { 
      if (string.IsNullOrEmpty(Date)) 
      { 
       PostedBy.Text = ""; 
       PostedOn.Text = ""; 
      } 
      else 
      { 
       PostedBy.Text = "Posted "; 
      } 

     } 
    } 
} 

J'utilise un CMS, et je ne suis pas sûr de ce que toutes les propriétés sont dans le e.Item.DataItem. Existe-t-il un moyen de parcourir le DataItem et d'imprimer les noms/valeurs des propriétés?

Merci!

Répondre

2

Les propriétés de DataItem dépendent du type d'objet qu'il contient. Il contiendra l'objet de la source de données en cours de traitement lors de la liaison de données au répéteur. La méthode suivante prend un objet et énumère les propriétés qu'il contient:

private static void PrintAllProperties(object obj) 
{ 
    obj.GetType(). 
     GetProperties(). 
     ToList(). 
     ForEach(p => 
      Console.WriteLine("{0} [{1}]", p.Name, p.PropertyType.ToString() 
      )); 
} 

Exemple de sortie (pour une instance de String):

Chars [System.Char] 
Length [System.Int32] 
+0

des thats Ok bonne information, sauf que je ne vois pas « Auteur » dans le résultats. Y a-t-il autre chose que je puisse faire? – Anders

+0

Si vous définissez un point d'arrêt dans la méthode que j'ai fournie, vous pouvez examiner obj dans le débogueur; alors vous verrez probablement clairement quel genre d'objet il arrive. –

Questions connexes