27 votes

Mise En Forme DataBinder.Eval données

Comment puis-je formater les données en provenance d'un DataBinder.Eval déclaration dans une page ASPX?

Par exemple, je veux afficher la date de publication des articles de presse dans un format particulier dans la page d'accueil. Je suis à l'aide de la ASP.NET 2.0 contrôle Repeater pour afficher la liste des éléments d'actualité.

Le code pour que cela se passe comme ceci:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
<HeaderTemplate><table cellpadding="0" cellspacing="0" width="255"></HeaderTemplate>
<ItemTemplate>
    <tr><td >
            <a href='http://stackoverflow.com/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>

Est-il un moyen que je pourrais appeler une méthode personnalisée avec le DataBinder.Eval valeur comme paramètre (quelque chose comme ci-dessous)?

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

Si oui, où dois-je écrire le GetDateInHomepageFormat méthode? J'ai essayé dans le code-behind de la page, mais a eu une erreur d'exécution? Si ce n'est pas possible, est-il un moyen de faire du formatage en ligne?

55voto

DOK Points 21175

Il y a une surcharge facultatif pour DataBinder.Eval pour l'approvisionnement de la mise en forme:

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

Le paramètre format est une Chaîne de valeur, à l'aide de la valeur de l'espace réservé de remplacement de la syntaxe (composite mise en forme) comme ceci:

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

14voto

Nahom Tijnam Points 1789

Après quelques recherches sur Internet, j'ai trouvé que c'est en fait tout à fait possible d'appeler une méthode personnalisée en passant la DataBinder.Eval valeur.

La méthode personnalisée peut être écrit dans le fichier code-behind, mais doit être déclarée public ou protégé. Dans ma question ci-dessus, j'avais mentionné que j'ai essayé d'écrire la méthode personnalisée dans le code derrière, mais a été d'obtenir une erreur d'exécution. La raison pour cela est que j'avais déclaré à la méthode privée.

Donc, en résumé, ce qui suit est une bonne façon d'utiliser DataBinder.Eval valeur pour obtenir votre sortie désirée:

par défaut.aspx

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

par défaut.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;
    }
}

Espérons que cela aide les autres.

12voto

Diego C. Points 1431

Pourquoi ne pas utiliser la syntaxe plus simple?

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

C'est le modèle de contrôle "Eval" qu'il prend dans l'expression et le format de chaîne de caractères:

protected internal string Eval(
string expression,
string format

)

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

11voto

dexter Points 645

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

Vous pouvez également formater votre domaine en ligne:

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

Si vous utilisez ASP.NET 2.0 ou plus récent, vous pouvez écrire ce que ci-dessous:

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X