Я просто добавляю это, чтобы быть точным:
Все остальные ответы относятся к модулям . Исходный вопрос явно упоминается __all__
в файлах __init__.py
, поэтому речь идет о пакетах python .
Как правило, __all__
входит в игру только тогда, когда вариант from xxx import *
оператора import
. Это относится как к пакетам, так и к модулям.
Поведение для модулей объясняется в других ответах. Точное поведение для пакетов описано здесь здесь .
Короче говоря, __all__
на уровне пакета делает примерно то же самое, что и для модулей, за исключением того, что он имеет дело с модулей внутри пакета (в отличие от указания имен в модуле ). Таким образом, __all__
указывает все модули, которые должны быть загружены и импортированы в текущее пространство имен, когда мы используем from package import *
.
Большая разница в том, что когда вы опускаете , декларация __all__
в пакете __init__.py
, инструкция from package import *
вообще ничего не импортирует (с исключениями, описанными в документации, см. ссылку выше).
С другой стороны, если вы опускаете __all__
в модуле, «избранный импорт» будет импортировать все имена (не начиная с подчеркивания), определенные в модуле.
Существует необязательная перегрузка для 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>
Вы можете использовать функцию в ретрансляторе, как вы сказали, но обратите внимание, что 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.
<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>
Эта строка решила мою проблему:
<%#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>
Это шаблон управления "Eval", который принимает выражение и формат строки:
protected internal string Eval(
string expression,
string format
)
Для форматирования даты с использованием локального формата даты используйте:
<%#((DateTime)Eval("ExpDate")).ToString("d")%>
Как отформатировать оператор Eval для отображения даты с использованием локали даты
После некоторых поисков в Интернете я обнаружил, что на самом деле очень возможно вызвать пользовательский метод, передавая значение 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 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;
}
}
Надеюсь, что это помогает другим.
Text = '<% # DateTime.Parse (Eval ("LastLoginDate"). ToString ()). ToString ("MM / дд / гггг чч: мм тт")%>'
Это работает для формата, как вы хотите
Спасибо всем. Я застрял в строках стандартного формата в течение некоторого времени. Я также использовал пользовательскую функцию в 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