格式化DataBinder.Eval数据

时间:2008-11-08 20:58:00

标签: asp.net formatting repeater databinder

如何格式化来自ASPX页面中DataBinder.Eval语句的数据?

例如,我想在主页中以特定格式显示新闻项的发布日期。我正在使用ASP.NET 2.0 Repeater控件来显示新闻列表。

这个代码是这样的:

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

有没有办法可以调用DataBinder.Eval值作为参数的自定义方法(如下所示)?

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

如果是,那么我在哪里编写GetDateInHomepageFormat方法?我尝试了代码隐藏页面,但是出现了运行时错误? 如果无法做到这一点,有没有办法进行内联格式化?

10 个答案:

答案 0 :(得分:57)

DataBinder.Eval有一个可选的重载来提供格式化:

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

format参数是一个String值,使用值占位符替换语法(称为复合格式),如下所示:

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

答案 1 :(得分:14)

在互联网上进行一些搜索之后,我发现实际上很可能来调用传递DataBinder.Eval值的自定义方法。

自定义方法可以写在代码隐藏文件中,但必须声明为 public protected 。在我上面的问题中,我曾提到过我尝试在后面的代码中编写自定义方法但是遇到了运行时错误。原因是我已经宣布该方法为私有

因此,总结以下是使用DataBinder.Eval值来获得所需输出的好方法:

的Default.aspx

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

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

希望这也有助于其他人。

答案 2 :(得分:12)

为什么不使用更简单的语法?

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

这是模板控件“Eval”,它接受表达式和字符串格式:

protected internal string Eval(
string expression,
string format

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

答案 3 :(得分:11)

你可以像你说的那样将函数用于转发器,但请注意DataBinder.Eval返回一个对象,你必须将它转换为DateTime。

您还可以内联格式化字段:

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

如果您使用的是ASP.NET 2.0或更高版本,可以按如下方式编写:

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

另一个选择是在OnItemDataBound事件中将值绑定到label。

答案 4 :(得分:3)

这条线解决了我的问题:

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

答案 5 :(得分:2)

要使用本地日期格式格式化日期,请使用:

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

How to Format an Eval Statement to Display a Date using Date Locale

答案 6 :(得分:1)

感谢所有人。我曾经被困在标准格式字符串上一段时间了。我还在VB中使用了自定义函数。

Mark Up: -

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

代码背后: -

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

答案 7 :(得分:1)

Text ='&lt;%#DateTime.Parse(Eval(“LastLoginDate”)。ToString())。ToString(“MM / dd / yyyy hh:mm tt”)%&gt;'

这适用于您想要的格式

答案 8 :(得分: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>

答案 9 :(得分:0)

您可以在aspx页面中以这种方式使用它

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