Question

Comment puis-je formater les données provenant d'une instruction DataBinder.Eval dans une page ASPX?

Par exemple, je souhaite afficher la date de publication des nouvelles dans un format particulier sur la page d'accueil. J'utilise le contrôle ASP.NET 2.0 Repeater pour afficher la liste des éléments d'actualité.

Le code correspondant à ceci va comme ceci:

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

Existe-t-il un moyen d'appeler une méthode personnalisée avec la valeur DataBinder.Eval comme paramètre (comme ci-dessous)?

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

Si oui, où dois-je écrire la méthode GetDateInHomepageFormat? J'ai essayé dans la page de code derrière mais une erreur d'exécution s'est produite? Si cela n’est pas possible, existe-t-il un moyen de procéder au formatage en ligne?

Était-ce utile?

La solution

Il existe une surcharge facultative pour DataBinder.Eval pour fournir le formatage:

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

Le paramètre format est une valeur String, utilisant la syntaxe de remplacement de valeur de réservation (appelée mise en forme composite), comme suit:

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

Autres conseils

Après quelques recherches sur Internet, nous avons constaté qu'il est très possible d'appeler une méthode personnalisée en transmettant la valeur DataBinder.Eval.

La méthode personnalisée peut être écrite dans le code derrière le fichier, mais doit être déclarée public ou protégée . Dans ma question ci-dessus, j'avais mentionné que j'avais essayé d'écrire la méthode personnalisée dans le code suivant, mais que j'avais une erreur d'exécution. La raison en était que j'avais déclaré la méthode privée .

En résumé, voici un bon moyen d’utiliser la valeur DataBinder.Eval pour obtenir le résultat souhaité:

default.aspx

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

code 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;
    }
}

J'espère que cela aidera également les autres.

Pourquoi ne pas utiliser la syntaxe plus simple?

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

Il s'agit du contrôle de modèle " Eval " qui prend dans l'expression et le format de chaîne:

protected internal string Eval(
string expression,
string format

)

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

Vous pouvez utiliser une fonction dans un répéteur, comme vous l'avez dit, mais notez que DataBinder.Eval renvoie un objet et vous devez le convertir en DateTime.

Vous pouvez également formater votre champ en ligne:

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

Si vous utilisez ASP.NET 2.0 ou une version plus récente, vous pouvez écrire ce qui suit:

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

Une autre option consiste à lier la valeur à l'étiquette lors de l'événement OnItemDataBound.

Cette ligne a résolu mon problème:

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

Pour formater la date en utilisant le format de date local, utilisez:

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

Comment formater une instruction d'évaluation afficher une date à l'aide des paramètres régionaux

Merci à tous. Je suis resté bloqué sur des chaînes de format standard pendant un certain temps. J'ai également utilisé une fonction personnalisée en VB.

Marquez: -

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

Code derrière: -

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

Cela fonctionne pour le format que vous voulez

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

Vous pouvez l'utiliser de cette manière dans une page aspx

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top