2009-07-15 5 views
0

Ich habe diese Code-Behind, die jedes Element in einem Repeater prüft, wenn es datenbankabhängig ist, um zu sehen, ob der Autor/das Datum leer ist (entweder kein Autor/Datum oder das System so eingestellt ist, dass sie nicht angezeigt werden) löschen Sie ihre jeweiligen Etiketten. Dies ist so, dass ich etwas wie "Posted by on" nicht bekomme, wenn kein Autor und/oder Datum angegeben ist. HierIst es möglich, Eigenschaftsnamen von einem datengebundenen Objekt abzurufen?

ist der 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 "; 
      } 

     } 
    } 
} 

ich ein CMS verwenden, und ich bin nicht sicher, was alle Eigenschaften sind in den e.Item.DataItem. Gibt es eine Möglichkeit, wie ich das DataItem durchlaufen und die Eigenschaftsnamen/-werte ausdrucken kann?

Danke!

Antwort

2

Welche Eigenschaften DataItem haben wird, hängt davon ab, welche Art von Objekt es enthält. Es enthält das Objekt aus der Datenquelle, die gerade verarbeitet wird, wenn der Repeater mit Daten versorgt wird. Das folgende Verfahren nimmt ein beliebiges Objekt und zeigt die Eigenschaften es enthält:

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

Beispiel Ausgabe (für eine String-Instanz):

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

Ok, das ist eine gute Information, außer ich sehe ‚Autor‘ nicht in der Ergebnisse. Kann ich noch etwas anderes machen? – Anders

+0

Wenn Sie in der von mir angegebenen Methode einen Haltepunkt festlegen, können Sie obj im Debugger untersuchen. dann werden Sie wahrscheinlich genau sehen, um welche Art von Objekt es sich handelt. –