2 ответа
Эта статья может помочь вам понять. Цитата:
Так что же это за выражение? <% #%> Означает, что это выражение DataBinding, а Container.DataItem - псевдоним для текущего элемента в источнике данных. Другими словами, если вы связываетесь с коллекцией объектов, Container.DataItem является текущей строкой этой коллекции.
Эта запись в блоге дает справку о том, когда использовать. Цитата:
Container.DataItem является псевдонимом времени выполнения для DataItem для этого конкретного элемента в связанном списке. Для сетки, которая отображает 10 строк данных, это одна строка из источника данных. Фактический тип DataItem определяется типом источника данных. Например, если источником данных является Dataview, тип DataItem - DataRowView. Если тип источника данных представляет собой массив строк, тип DataItem - String. Если источник данных представляет собой набор строго типизированных объектов (например, объектов "Сотрудники"), тип DataItem - "Сотрудники".
Каждый из этих случаев требует немного различного выражения привязки данных с дальнейшими различиями между VB и C#.
Я столкнулся с этим же вопросом специально в контексте попытки доступа Container.DataItem
из-за кода. Container
существует в aspx
/ascx
код, но не существует внутри кода. Посмотрев на сгенерированный код C#, я увидел, что это приведенная ссылка на BindingContainer
на конкретный контроль быть связанным.
Эквивалентный код с выделенным кодом для Container.DataItem
это:
var ddl = (DropDownList) source;
var dataItem = ((RepeaterItem) ddl.BindingContainer).DataItem;