Asp.net 格式化DataBinder.Eval数据

Asp.net 格式化DataBinder.Eval数据,asp.net,formatting,repeater,databinder,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="

如何格式化来自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>
<asp:Label id="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate", "{0:dddd d MMMM}") %>'</label>

是否有一种方法可以调用一个自定义方法,将DataBinder.Eval值作为其参数(如下所示)


如果是,那么在哪里编写GetDateInHomepageFormat方法?我在代码隐藏页面中尝试过,但遇到运行时错误?
如果不可能,是否有方法进行内联格式化?

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

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

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

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

您可以像前面所说的那样在中继器中使用函数,但请注意,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事件中将值绑定到标签。

在Internet上搜索了一些内容后,我发现实际上很有可能调用传递DataBinder.Eval值的自定义方法

自定义方法可以写在代码隐藏文件中,但必须声明为publicprotected。在我上面的问题中,我提到我试图在代码隐藏中编写自定义方法,但遇到了运行时错误。这样做的原因是我已经声明该方法是私有的

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

default.aspx

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

希望这对其他人也有帮助。

这句话解决了我的问题:

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


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

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

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

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


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

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


谢谢大家。一段时间以来,我一直使用标准格式字符串。我还在VB中使用了一个自定义函数

加价:-

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


这适用于您想要的格式

@Wahab:只要您愿意内联进行格式设置,这就完美了。然而,最初的问题是如何使用自定义方法进行格式化。其想法是,您可以在ASPX页面中重复使用自定义方法并降低复杂性。干杯检查日期是否为空,如果不是空,则格式化并存储日期!很好的回答。。。同样值得为DateTime的所有C#字符串格式添加此链接,但我只想指出,在上面的标签示例中,格式表达式的末尾缺少一个“}”和一个额外的“]”。它应该是:…,“{0:ddddd d MMMM}”)%%>”@PhillFox Good catch。谢谢,我修正了。在这里回复是因为这在谷歌的搜索结果中仍然很高。请记住,使用Eval时会有性能损失(因为后期绑定)。要格式化输出,我更喜欢将显式转换传递给函数,例如,它应该是“expression”[,“format”]),而不是“expression”[“format”])完美!这就是我需要的
<%#((DateTime)Eval("ExpDate")).ToString("d")%>
<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