Domanda

Come posso formattare i dati provenienti da un'istruzione DataBinder.Eval in una pagina ASPX?

Ad esempio, voglio visualizzare la data pubblicata delle notizie in un formato particolare nella homepage. Sto usando il controllo Repeater ASP.NET 2.0 per mostrare l'elenco delle notizie.

Il codice per questo va così:

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

C'è un modo in cui potrei chiamare un metodo personalizzato con il valore DataBinder.Eval come parametro (qualcosa come sotto)?

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

Se sì, allora dove scrivo il metodo GetDateInHomepageFormat? Ho provato nel codice dietro la pagina ma ho riscontrato un errore di runtime? Se ciò non è possibile, esiste un modo per eseguire la formattazione in linea?

È stato utile?

Soluzione

Esiste un sovraccarico opzionale per DataBinder.Eval per fornire la formattazione:

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

Il parametro format è un valore String, che utilizza la sintassi di sostituzione segnaposto valore (chiamata formattazione composita) in questo modo:

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

Altri suggerimenti

Dopo alcune ricerche su Internet ho scoperto che è in effetti molto possibile chiamare un metodo personalizzato che passa il valore DataBinder.Eval.

Il metodo personalizzato può essere scritto nel codice dietro il file, ma deve essere dichiarato pubblico o protetto . Nella mia domanda sopra, avevo menzionato che avevo provato a scrivere il metodo personalizzato nel codice dietro ma stava ottenendo un errore di runtime. Il motivo era che avevo dichiarato che il metodo era privato .

Quindi, in sintesi, il seguente è un buon modo per utilizzare DataBinder.Eval value per ottenere l'output desiderato:

default.aspx

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

codice default.aspx.cs:

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

    protected string GetDateInHomepageFormat(DateTime d)
    {

        string retValue = "";

        // Do all processing required and return value

        return retValue;
    }
}

Spero che questo aiuti anche gli altri.

Perché non usare la sintassi più semplice?

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

Questo è il controllo template " Eval " che accetta l'espressione e il formato stringa:

protected internal string Eval(
string expression,
string format

)

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

Puoi usare una funzione in un ripetitore come hai detto, ma nota che DataBinder.Eval restituisce un oggetto e devi lanciarlo in un DateTime.

Puoi anche formattare il tuo campo in linea:

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

Se si utilizza ASP.NET 2.0 o versioni successive, è possibile scrivere come segue:

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

Un'altra opzione è quella di associare il valore da etichettare all'evento OnItemDataBound.

Questa riga ha risolto il mio problema:

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

Per formattare la data utilizzando il formato data locale, utilizzare:

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

Come formattare una dichiarazione di valutazione visualizzare una data usando Data Locale

Grazie a tutti. Ero stato bloccato su stringhe di formato standard per qualche tempo. Ho anche usato una funzione personalizzata in VB.

Mark Up: -

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

Codice dietro: -

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 / dd / yyyy hh : mm tt ")% > '

Funziona nel formato desiderato

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

Puoi usarlo in questo modo nella pagina aspx

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top