Come si fa manualmente databind oggetto complesso di controllo basato su modelli come una riga in un GridView?

StackOverflow https://stackoverflow.com/questions/711304

Domanda

Ho difficoltà con la sintassi di associazione dati qui. Per esempio io ho una struttura di dati come questo -

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

}

Ora, se voglio legare questa lista Corsi di dire una GridView manualmente, ho potuto fare

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

specificando per la modifica del modello di griglia, ma come faccio a legare le Istruttori insegnare proprietà di dire una ListBox nella stessa riga, Non riesco a capire la sintassi, qui è un exaple di quello che ho provato e fallito

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

Il mio codice di cui sopra non funziona di sicuro :). Idealmente mi piacerebbe fare questo in markup invece di codice dietro.

È stato utile?

Soluzione

Non credo che è possibile impostare un'origine dati del genere, provate ad impostare su evento RowDataBound di GridView

Altri suggerimenti

Hai colpito su una delle principali ragioni che ASP.NET 2 vie databinding schifo: Davvero non si può fare annidato 2-way databinding

.

Per prima cosa, anche se è possibile farlo con Eval, ASP.NET non consente la sintassi grafico nidificato con l'espressione Bind, (vale a dire <% # Bind ( "Customer.FirstName")%>).

Oltre a ciò, per i controlli elenco nidificati come il vostro scenario, ogni lista richiede un controllo DataSource aggiuntivo. Si sta impostando il DataSource sul ListBox, che lavorerà per le espressioni Eval, ma per le espressioni di legame al lavoro, è necessario utilizzare DataSourceID per fornire l'ID di un controllo DataSource che fornisce il set di risultati interiore. E anche allora i risultati sarebbero kludgy dato che si poteva aggiornare una sola origine dati alla volta.

2 vie associazione dati è stato probabilmente scritto con SqlDataSource in mente e non ObjectDataSource. Se si dispone di un oggetto grafico multi-livello, lo troverete doloroso da usare a 2 vie associazione dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top