如何将复杂对象手动数据绑定到模板化控件(如gridview中的行)?

时间:2009-04-02 19:45:51

标签: c# asp.net data-binding webforms objectdatasource

我正在努力解决这里的数据绑定语法问题。例如,我有一个像这样的数据结构 -

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 个答案:

答案 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上设置