2008-11-08 278 views
29

如何格式化数据来自ASPX页面中的DataBinder.Eval语句?格式化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方法?我在页面后面的代码中尝试过,但得到了运行时错误? 如果这是不可能的,有没有办法做内联格式?

回答

57

有一个可选的过载的DataBinder.Eval提供格式:

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

格式参数是一个字符串值,使用值的占位符替换语法(称为复合格式)是这样的:

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

伟大的答案...也值得添加此链路F或在http://www.csharp-examples.net/string-format-datetime/ – naveen 2010-07-31 10:51:56

+0

上为DateTime提供的所有C#字符串格式很好的答案,但我只想指出缺少'}'和一个额外的' ]'在上述标签示例中格式表达式的末尾。它应该是:...,“{0:dddd d MMMM}”)%>' – PhillFox 2010-12-03 17:20:56

+0

@PhillFox好的。谢谢,我解决了。 – DOK 2010-12-03 20:49:24

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事件标签。

14

在Internet上搜索一下后,我发现实际上很可能是来调用传递DataBinder.Eval值的自定义方法。

自定义方法可以写在文件后面的代码中,但必须声明为publicprotected。在我上面的问题中,我提到过我试图在后面的代码中编写自定义方法,但得到运行时错误。原因是我已经宣布该方法是私人

所以,总结以下是使用的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; 
    } 
} 

希望这可以帮助其他人。

3

此行解决我的问题:

<%#DateTime.Parse(Eval("DDDate").ToString()).ToString("dd-MM-yyyy")%> 
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> 
0

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

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

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

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

这是发生在表达和字符串格式的模板对照 “评估和演示”:

protected internal string Eval(
string expression, 
string format 

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

1

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

标记: -

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

后面的代码: - (エ( “LastLoginDate”)的ToString())。

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

文本=” <%#DateTime.Parse的ToString( “MM/DD/YYYY HH:MM TT”)%>”

这适用的格式,只要你想