Как вручную связать сложный объект с шаблонным элементом управления, например, строкой в ​​виде сетки? - PullRequest
3 голосов
/ 02 апреля 2009

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

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")%>'/>

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

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

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

Ответы [ 2 ]

3 голосов
/ 18 ноября 2009

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

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

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

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

1 голос
/ 03 апреля 2009

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

...