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 をバインドして、グリッドビューを手動で表示するようにするには、次のようにします。

<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方向データバインディングを実際に行うことはできません。

1つには、Evalを使用して実行できますが、ASP.NETではBind式を使用したネストされたグラフ構文は許可されていません(つまり、<%#Bind( "Customer.FirstName")%>)。

さらに、シナリオのようなネストされたリストコントロールの場合、各リストには追加のDataSourceコントロールが必要になります。リストボックスにデータソースを設定します。これは評価式で機能しますが、式のバインドが機能するには、DataSourceIDを使用して、内部結果セットを提供するデータソースコントロールのIDを指定する必要があります。それでも、一度に1つのデータソースしか更新できないため、結果は不格好になります。

双方向のデータバインディングは、ObjectDataSourceではなくSqlDataSourceを念頭に置いて作成された可能性があります。マルチレベルのオブジェクトグラフがある場合、双方向のデータバインディングを使用するのは面倒です。

于 2009-11-17T23:30:14.227 に答える
1

そのようなデータソースを設定できないと思います。GridView の RowDataBound イベントで設定してみてください

于 2009-04-02T20:04:45.167 に答える