Как вручную привязать сложный объект к шаблонному элементу управления, например строку в gridview?

StackOverflow https://stackoverflow.com/questions/711304

Вопрос

Здесь я борюсь с синтаксисом привязки данных.Например, у меня есть структура данных, подобная этой -

public class Course{

public string CourseName {get;set;}

public string CourseCode {get;set;}

public List<Instructor> InstructorsTeaching{get;set;}

}

public class Instructor{

public string InstructorName{get;set;}

public string InstructorCode{get;set;}

}

Теперь, если я хочу привязать этот список Курсов, скажем, к gridview вручную, я мог бы сделать

<asp:TextBox runat="server" ID="tbCourseName" Text='<%# Bind("CourseName")%>'/>

при указании для редактирования шаблона сетки, но как мне привязать свойство Instructors teaching, чтобы указать ListBox в той же строке, я не могу разобраться в синтаксисе, вот пример того, что я пробовал и потерпел неудачу

<asp:ListBox runat="server" ID="tbInstructors" 
     DataSource='<%# Eval("InstructorsTeaching") as List<Instructor> %>'>
    <asp:ListItem Text='<%# Bind("InstructorCode")%>' 
                 Value='<%# Bind("InstructorName")%>'/>...
 <as:ListBox/>

Мой приведенный выше код точно не работает :).В идеале я хотел бы сделать это в разметке, а не в коде за ней.

Это было полезно?

Решение

Я не думаю, что вы можете установить такой источник данных, попробуйте установить его на Событие RowDataBound в GridView для RowDataBound

Другие советы

Вы наткнулись на главную причину, по которой ASP.NET Двусторонняя привязка данных - отстой:Вы действительно не можете выполнить вложенную двустороннюю привязку данных.

С одной стороны, хотя вы можете сделать это с помощью Eval , ASP.NET не допускает синтаксис вложенного графа с выражением Bind, (т.е.<%# Привязать("Клиент.Имя пользователя") %>).

Кроме того, для элементов управления вложенным списком, подобных вашему сценарию, для каждого списка потребуется дополнительный элемент управления источником данных.Вы устанавливаете источник данных в своем ListBox, который будет работать для выражений Eval, но для работы выражений привязки вы должны использовать DataSourceID для предоставления идентификатора элемента управления DataSource, который предоставляет внутренний результирующий набор.И даже тогда ваши результаты были бы запутанными, поскольку вы могли бы обновлять только один источник данных за раз.

Двусторонняя привязка данных, вероятно, была написана с учетом SqlDataSource, а не ObjectDataSource .Если у вас многоуровневый объектный граф, вам будет сложно использовать двустороннюю привязку данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top