2008-11-08 11 views
29

Wie kann ich Daten formatieren, die von einer DataBinder.Eval-Anweisung in einer ASPX-Seite kommen?Formatieren von DataBinder.Eval-Daten

Zum Beispiel möchte ich das veröffentlichte Datum der Nachrichten in einem bestimmten Format auf der Homepage anzeigen. Ich verwende das ASP.NET 2.0 Repeater-Steuerelement, um die Liste der Nachrichten anzuzeigen.

Der Code dafür lautet:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1"> 
<HeaderTemplate><table cellpadding="0" cellspacing="0" width="255"></HeaderTemplate> 
<ItemTemplate> 
    <tr><td > 
      <a href='/content/latestNews.aspx?id=<%#DataBinder.Eval(Container.DataItem, "id") %>'> 
       <asp:Label ID="lblNewsTitle" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "title") %>'></asp:Label> 
      </a> 
    </td></tr> 
    <tr><td> 
      <asp:Label ID="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate"))%>'></asp:Label> 
    </td></tr> 
</ItemTemplate> 
<FooterTemplate></table></FooterTemplate></asp:Repeater> 

Gibt es eine Weise, die ich als Parameter (so etwas wie unten) eine eigene Methode mit dem DataBinder.Eval Wert nennen könnte?

<asp:Label ID="lblNewsDate" runat="server" Text='<%# GetDateInHomepageFormat(DataBinder.Eval(Container.DataItem, "publishedDate")))%>'></asp:Label> 

Wenn ja, wo schreibe ich dann die Methode GetDateInHomepageFormat? Ich habe es im Code hinter der Seite ausprobiert, aber einen Laufzeitfehler bekommen? Wenn dies nicht möglich ist, gibt es eine Möglichkeit, Inline-Formatierung zu tun?

Antwort

57

Es ist eine optionale Überlast für DataBinder.Eval Formatierung liefern:

<%# DataBinder.Eval(Container.DataItem, "expression"[, "format"]) %> 

Das Format Parameter ist ein String-Wert, den Wert Platzhalter Ersatz-Syntax wie folgt aus (composite Formatierung bezeichnet):

<asp:Label id="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate", "{0:dddd d MMMM}") %>'</label> 
+2

große Antwort wollen ... auch die Mühe wert, diesen Link f hinzufügen oder das ganze C# String Format für DateTime unter http://www.csharp-examples.net/string-format-datetime/ – naveen

+0

Gute Antwort, aber ich möchte nur darauf hinweisen, dass ein '}' und ein 'Extra' fehlt ] 'am Ende des Formatausdrucks im obigen Label-Beispiel. Es sollte sein: ..., "{0: dddd d MMMM}")%> ' – PhillFox

+0

@PhillFox Guter Fang. Danke, ich habe es behoben. – DOK

11

Sie können eine Funktion in einem Repeater verwenden, wie Sie sagten, aber beachten Sie, dass der DataBinder.Eval ein Objekt zurückgibt und Sie es in eine DateTime umwandeln müssen.

können Sie formatieren auch Ihr Feld inline:

<%# ((DateTime)DataBinder.Eval(Container.DataItem,"publishedDate")).ToString("yyyy-MMM-dd") %> 

Wenn Sie ASP.NET 2.0 oder höher können Sie dies wie unten schreiben:

<%# ((DateTime)Eval("publishedDate")).ToString("yyyy-MMM-dd") %> 

Eine andere Möglichkeit ist, den Wert zu binden Etikett bei OnItemDataBound-Ereignis.

+0

Perfekt! Das ist was ich brauche – Khaneddy2013

14

Nach einigem Suchen im Internet fand ich, dass es tatsächlich sehr viel möglich ist eine benutzerdefinierte Methode aufzurufen, die den DataBinder.Eval-Wert übergibt.

Die benutzerdefinierte Methode kann in der Code-behind-Datei geschrieben werden, hat aber zu öffentlichen oder geschützt deklariert werden. In meiner Frage oben hatte ich erwähnt, dass ich versuchte, die benutzerdefinierte Methode in den Code hinter zu schreiben, aber einen Laufzeitfehler erhalten. Der Grund dafür war, dass ich die Methode als private deklariert hatte.

zusammenfassend also Folgendes ist ein guter Weg DataBinder.Eval Wert zu benutzen, um Ihre gewünschte Ausgabe zu erhalten:

default.aspx

<asp:Label ID="lblNewsDate" runat="server" Text='<%# GetDateInHomepageFormat(DataBinder.Eval(Container.DataItem, "publishedDate")))%>'></asp:Label> 

default.aspx.cs Code:

Hoffe das hilft anderen auch.

3

Diese Linie mein Problem gelöst:

<%#DateTime.Parse(Eval("DDDate").ToString()).ToString("dd-MM-yyyy")%> 
+0

@Wahab: Das ist perfekt, solange Sie gerne die Formatierung inline machen. Die ursprüngliche Frage war jedoch, wie Sie eine benutzerdefinierte Methode für die Formatierung verwenden können. Sie könnten die benutzerdefinierte Methode erneut verwenden und die Komplexität auf der ASPX-Seite reduzieren. Prost. –

0
<asp:Label ID="ServiceBeginDate" runat="server" Text='<%# (DataBinder.Eval(Container.DataItem, "ServiceBeginDate", "{0:yyyy}") == "0001") ? "" : DataBinder.Eval(Container.DataItem, "ServiceBeginDate", "{0:MM/dd/yyyy}") %>'> 
</asp:Label> 
+2

+0

Dies überprüft, ob das Datum NULL ist und ob es nicht formatiert und speichert das Datum! –

0

Sie können es auf diese Weise in aspx Seite verwenden

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %> 
12

Warum die einfachere Syntax nicht verwenden?

<asp:Label id="lblNewsDate" runat="server" Text='<%# Eval("publishedDate", "{0:dddd d MMMM}") %>'</label> 

Dies ist die Template-Steuerung "Eval", die in dem Ausdruck und dem String Format verwendet:

protected internal string Eval(
string expression, 
string format 

)

http://msdn.microsoft.com/en-us/library/3d2sz789.aspx

1

Vielen Dank an alle. Ich hatte einige Zeit auf Standardformatzeichen geklammert. Ich habe auch eine benutzerdefinierte Funktion in VB verwendet.

Mark Up: -

<asp:Label ID="Label3" runat="server" text='<%# Formatlabel(DataBinder.Eval(Container.DataItem, "psWages1D")) %>'/> 

-Code hinter: - (. Eval ("LastLoginDate") ToString()).

Public Function fLabel(ByVal tval) As String 
    fLabel = tval.ToString("#,##0.00%;(#,##0.00%);Zero") 
End Function 
1

Text =‘<% # DateTime.Parse ToString ("mM/tt/hh: mm tt")%>‘

Dies funktioniert für das Format, wie Sie