3

我在这里为数据绑定语法而苦苦挣扎。例如我有一个这样的数据结构 -

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;}

}

现在,如果我想手动绑定这个 List Courses 说一个 gridview,我可以这样做

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

在指定网格的编辑模板时,但是如何将 Instructors 教学属性绑定到同一行中的 ListBox,我无法弄清楚语法,这是我尝试和失败的示例

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

我上面的代码肯定不起作用:)。理想情况下,我想在标记而不是后面的代码中执行此操作。

4

2 回答 2

3

您已经找到了 ASP.NET 2 路数据绑定糟糕的一个主要原因:您真的不能进行嵌套的 2 路数据绑定。

一方面,尽管您可以使用 Eval 来实现,但 ASP.NET 不允许使用 Bind 表达式嵌套图形语法(即 <%# Bind("Customer.FirstName") %>)。

除此之外,对于像您的场景这样的嵌套列表控件,每个列表都需要一个额外的 DataSource 控件。您正在 ListBox 上设置 DataSource,这将适用于 Eval 表达式,但要使绑定表达式起作用,您必须使用 DataSourceID 来提供提供内部结果集的 DataSource 控件的 ID。即使这样,您的结果也会很糟糕,因为您一次只能更新一个数据源。

2 路数据绑定可能是在考虑 SqlDataSource 而不是 ObjectDataSource 的情况下编写的。如果你有一个多层次的对象图,你会发现使用 2-way 数据绑定很痛苦。

于 2009-11-17T23:30:14.227 回答
1

我不认为你可以设置这样的数据源,尝试在GridView 的 RowDataBound 事件上设置它

于 2009-04-02T20:04:45.167 回答