我正在努力解决这里的数据绑定语法问题。例如,我有一个像这样的数据结构 -
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/>
我的上述代码无法正常运行:)。理想情况下,我想在标记而不是代码背后执行此操作。
答案 0 :(得分:3)
你遇到了ASP.NET 2路数据绑定很糟糕的一个主要原因:你真的不能做嵌套的双向数据绑定。
首先,尽管您可以使用Eval执行此操作,但ASP.NET不允许使用Bind表达式嵌套图形语法(即&lt;%#Bind(“Customer.FirstName”)%&gt;)。< / p>
除此之外,对于像场景一样的嵌套列表控件,每个列表都需要一个额外的DataSource控件。您正在ListBox上设置DataSource,这将适用于Eval表达式,但是要使绑定表达式起作用,您必须使用DataSourceID来提供提供内部结果集的DataSource控件的ID。即便如此,您的结果也会很糟糕,因为您一次只能更新一个数据源。
双向数据绑定可能是用SqlDataSource编写的,而不是ObjectDataSource。如果你有一个多级对象图,你会发现使用双向数据绑定很痛苦。
答案 1 :(得分:1)
我认为您不能设置这样的数据源,请尝试在GridView's RowDataBound event上设置