Форматирование данных DataBinder.Eval
Как я могу форматировать данные, поступающие из инструкции DataBinder.Eval на странице ASPX?
Например, я хочу отобразить опубликованную дату новостей в определенном формате на главной странице. Я использую элемент управления ретранслятора ASP.NET 2.0 для отображения списка новостей.
Код для этого выглядит следующим образом:
<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? Я опробовал код за страницей, но получил ошибку времени выполнения?
Если это невозможно, существует ли способ сделать встроенное форматирование?
Ответы
Ответ 1
Существует необязательная перегрузка для DataBinder.Eval для форматирования:
<%# DataBinder.Eval(Container.DataItem, "expression"[, "format"]) %>
Параметр формата представляет собой значение String, используя синтаксис замены замещающего значения (называемый составным форматированием) следующим образом:
<asp:Label id="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate", "{0:dddd d MMMM}") %>'</label>
Ответ 2
После некоторого поиска в Интернете я обнаружил, что на самом деле очень возможно вызвать пользовательский метод, передающий значение DataBinder.Eval.
Пользовательский метод может быть записан в код за файлом, но должен быть объявлен общедоступным или защищенным. В моем вопросе выше я упомянул, что пытался написать собственный метод в коде, но получал ошибку времени выполнения. Причиной этого было то, что я объявил, что метод частный.
Итак, в целом, это хороший способ использовать значение DataBinder.Eval для получения желаемого результата:
default.aspx
<asp:Label ID="lblNewsDate" runat="server" Text='<%# GetDateInHomepageFormat(DataBinder.Eval(Container.DataItem, "publishedDate")) )%>'></asp:Label>
default.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;
}
}
Надеюсь, это тоже поможет другим.
Ответ 3
Почему бы не использовать более простой синтаксис?
<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
Ответ 4
Вы можете использовать функцию в повторителе, как вы сказали, но обратите внимание, что DataBinder.Eval возвращает объект, и вы должны отдать его в DateTime.
Вы также можете форматировать свое поле inline:
<%# ((DateTime)DataBinder.Eval(Container.DataItem,"publishedDate")).ToString("yyyy-MMM-dd") %>
Если вы используете ASP.NET 2.0 или новее, вы можете написать это, как показано ниже:
<%# ((DateTime)Eval("publishedDate")).ToString("yyyy-MMM-dd") %>
Другой вариант - привязать значение к метке в событии OnItemDataBound.
Ответ 5
Эта строка решила мою проблему:
<%#DateTime.Parse(Eval("DDDate").ToString()).ToString("dd-MM-yyyy")%>
Ответ 6
Для форматирования даты с использованием формата локальной даты используйте:
<%#((DateTime)Eval("ExpDate")).ToString("d")%>
Как форматировать декларацию Eval для отображения даты с использованием локали даты
Ответ 7
Спасибо всем. Я некоторое время застрял в стандартном формате. Я также использовал пользовательскую функцию в VB.
Отметьте вверх: -
<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
Ответ 8
Text = '<% # DateTime.Parse(Eval ( "LastLoginDate" ). ToString()) ToString ( "MM/dd/yyyy hh: mm tt" )% > '
Это работает для формата, как вы хотите
Ответ 9
<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>
Ответ 10
Вы можете использовать его таким образом на странице aspx
<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>