Frage

Wie kann ich Datenformat von einer DataBinder.Eval-Anweisung in einer ASPX-Seite zu kommen?

Zum Beispiel möchte ich in einem bestimmten Format auf der Homepage das veröffentlichte Datum der Nachrichten angezeigt werden soll. Ich bin mit dem ASP.NET 2.0 Repeater-Steuerelement mit der Liste von Nachrichten zu zeigen.

Der Code dafür lautet wie folgt:

<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, dann wo schreibe ich die GetDateInHomepageFormat Methode? Ich habe versucht, in der Code-behind-Seite aber einen Laufzeitfehler erhalten? Wenn dies nicht möglich ist, ist es eine Möglichkeit, Inline-Formatierung zu tun?

War es hilfreich?

Lösung

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

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

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

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

Andere Tipps

Nach einiger Suche im Internet fand ich, dass es ist in der Tat sehr viel möglich eine benutzerdefinierte Methode rufen Sie den DataBinder.Eval Wert übergeben.

Die benutzerdefinierte Methode kann in der Code-behind-Datei geschrieben werden, hat aber erklärt werden Öffentlichkeit oder geschützt . In meiner Frage oben hatte ich erwähnt, dass ich versuchte, die benutzerdefinierte Methode in der Code-behind zu schreiben, aber wurde eine Laufzeit Fehler. Der Grund dafür war, dass ich die Methode sein, erklärt hatte, privat .

So in der Zusammenfassung der folgende 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:

public partial class _Default : System.Web.UI.Page
{

    protected string GetDateInHomepageFormat(DateTime d)
    {

        string retValue = "";

        // Do all processing required and return value

        return retValue;
    }
}

Hope dies andere auch hilft.

Warum nicht die einfachere Syntax 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 das String Format verwendet:

protected internal string Eval(
string expression,
string format

)

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

Sie können eine Funktion in einen Repeater verwenden, wie Sie gesagt haben, bemerken aber, dass die DataBinder.Eval ein Objekt zurückgibt, und Sie haben es zu einem DateTime- werfen.

Sie können auch Ihr Feld Inline-Format:

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

Wenn Sie ASP.NET 2.0 oder höher verwenden Sie diese wie unten schreiben:

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

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

Diese Zeile mein Problem gelöst:

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

Um das Datum zu formatieren Sie die lokale Datumsformat Verwendung mit:

<%#((DateTime)Eval("ExpDate")).ToString("d")%>

Wie eine Eval-Anweisung auf Format ein Datum mit Datum Locale Anzeige

Danke an alle. Ich hatte auf Standard-Format-Strings für einige Zeit aufgeklebt. Ich habe auch eine benutzerdefinierte Funktion in VB.

Mark Up: -

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

-Code hinter: -

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

Text = '<% # DateTime.Parse (. Eval ( "LastLoginDate") ToString ()) ToString ( "MM / tt / hh: mm tt").%>

Das funktioniert für das Format, wie Sie wollen

<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>

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

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top