2009-04-02 5 views
3

Je suis aux prises avec la syntaxe de liaison de données ici. Par exemple, j'ai une structure de données comme celui-ci -Comment manuellement déplacer un objet complexe vers un contrôle basé sur un modèle comme une ligne dans une grille?

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

} 

Maintenant, si je veux lier cette liste Cours-à-dire un gridview manuellement, je pouvais faire

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

tout en spécifiant pour le modèle d'édition de la grille mais comment puis-je lier les instructeurs propriété enseignement à dire un ListBox dans la même ligne, je ne peux pas comprendre la syntaxe, voici un exaple de ce que j'ai essayé et échoué

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

Mon code ci-dessus ne ne fonctionne pas à coup sûr :). Idéalement, je voudrais le faire dans le balisage au lieu du code derrière.

+0

a ajouté "C#" tag alors Jon Skeet répond pour vous :) –

Répondre

1

Je ne pense pas que vous pouvez définir une source de données comme ça, essayez de régler sur GridView's RowDataBound event

+0

Je suis clueless sur la syntaxe. Ce serait génial si je pouvais le faire via le balisage. Je pense que cela peut être fait .. peut-être que je me trompe – Perpetualcoder

3

Vous avez frappé sur une des principales raisons que ASP.NET 2 voies databinding suce: Vous ne pouvez vraiment pas faire liaison de données bidirectionnelle imbriquée. D'une part, bien que vous puissiez le faire avec Eval, ASP.NET n'autorise pas la syntaxe de graphes imbriqués avec l'expression Bind (c'est-à-dire <% # Bind ("Customer.FirstName")%>). Au-delà de cela, pour les contrôles de liste imbriqués comme votre scénario, chaque liste nécessitera un contrôle DataSource supplémentaire. Vous définissez le DataSource sur votre ListBox, qui fonctionnera pour les expressions Eval, mais pour que les expressions de liaison fonctionnent, vous devez utiliser DataSourceID pour fournir l'ID d'un contrôle DataSource qui fournit le jeu de résultats interne. Et même alors, vos résultats seraient kludgy puisque vous ne pouviez mettre à jour qu'une source de données à la fois.

La liaison de données bidirectionnelle a probablement été écrite en pensant à SqlDataSource et non à ObjectDataSource. Si vous disposez d'un graphe d'objets à plusieurs niveaux, il vous sera pénible d'utiliser la liaison de données bidirectionnelle.

+0

Je viens de décider de changer mon service api pour retourner XML et l'a fait la manière jquery. Les mécanismes d'Ohter étaient simplement trop lents pour les grands ensembles de données. Merci pour l'entrée – Perpetualcoder

Questions connexes