2009-04-02 6 views
3

Ich kämpfe hier mit der Syntax der Datenbindung. Zum Beispiel habe ich eine Datenstruktur, wie diese -Wie können Sie ein komplexes Objekt manuell wie eine Zeile in einer Gridview an das Steuerelement mit Vorlagen binden?

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

} 

Nun, wenn ich diese Liste Kurse binden möge einen gridview manuell zu sagen, ich

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

während der Angabe zum Bearbeiten Vorlage des Gitters tun könnte aber wie kann ich binden die Lehrer Eigenschaft lehrt eine ListBox in der gleichen Zeile zu sagen, ich kann nicht die Syntax herauszufinden, hier ist ein exaple von dem, was ich versucht und sind gescheitert

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

Mein oben Code tut nicht sicher arbeiten :). Idealerweise möchte ich dies in Markup statt Code dahinter machen.

+0

hinzugefügt "C#" -Tag, damit Jon Skeet antwortet es für Sie :) –

Antwort

1

Das glaube ich nicht, dass Sie eine Datenquelle so einstellen können, versuchen Sie es GridView's RowDataBound event

+0

Ich bin ratlos über die Syntax. Es wäre toll, wenn ich das über Markup machen könnte. Ich denke, dass es getan werden kann .. vielleicht bin ich falsch – Perpetualcoder

3

Sie auf Einstellung auf einem großen Grund getroffen haben, dass ASP.NET 2-Wege-Datenbindung saugt: Sie können nicht wirklich tun verschachtelte 2-Wege-Datenbindung.

Für eine Sache, obwohl Sie es mit Eval tun können, ASP.NET nicht verschachtelte Graph-Syntax mit dem Bind-Ausdruck (d. H. <% # Bind ("Customer.FirstName")%>).

Darüber hinaus benötigt jede Liste für verschachtelte Listensteuerelemente wie Ihr Szenario ein zusätzliches DataSource-Steuerelement. Sie legen die DataSource auf Ihrer ListBox fest, die für Eval-Ausdrücke funktioniert, aber damit die Bindungsausdrücke funktionieren, müssen Sie DataSourceID verwenden, um die ID eines DataSource-Steuerelements bereitzustellen, das die innere Ergebnismenge bereitstellt. Und selbst dann wären Ihre Ergebnisse kludig, da Sie nur jeweils eine Datenquelle aktualisieren können.

2-Wege-Datenbindung wurde wahrscheinlich mit SqlDataSource im Hinterkopf geschrieben und nicht ObjectDataSource. Wenn Sie ein mehrstufiges Objektdiagramm haben, ist es sehr schwierig, eine 2-Wege-Datenbindung zu verwenden.

+0

Ich entschied mich gerade, meine Service API zu ändern, um XML zurückzugeben, und tat es die jquery Weise. Andere Mechanismen waren für große Datensätze einfach zu langsam. Danke für die Eingabe – Perpetualcoder