GridView associato a Proprietà della class annidata

Ho una mappa degli oggetti simile a quanto elencato di seguito. Quando provo a bind le proprietà di NestedClass in un GridView ottengo l’errore:

“Un campo o una proprietà con il nome ‘NestedClass.Name’ non è stato trovato sull’origine dati selezionata.”

GridView è associato a ObjectDataSource e ObjectDataSource è associato a un’istanza completamente popolata di BoundClass.

C’è un modo per aggirare questo?

Classi di esempio:

    public class BoundClass { public string Name { get; set; } public NestedClass NestedClass { get; set; } } public class NestedClass { public string Name { get; set; } } 

    Solo le proprietà immediate di un’istanza possono essere visualizzate in una colonna BoundField.

    Bisogna invece usare DataBinder.Eval in un itemtemplate per accedere alla proprietà nidificata invece di assegnarla a un campo vincolato.

    Esempio:

       

    <%#DataBinder.Eval(Container.DataItem, "NestedClass.Name")%>

    In alternativa, puoi creare una class personalizzata che eredita BoundField e sostituisce GetValue per utilizzare DataBinder.Eval, come descritto in questo post del blog:

    http://web.archive.org/web/20120121123301/http://iridescence.no/post/FixingBoundFieldSupportforCompositeObjects.aspx

    Questa estensione su BoundField chiama DataBinder.Eval() , che supporta le proprietà nidificate:

     public class BetterBoundField : BoundField { protected override object GetValue(Control controlContainer) { if (DataField.Contains(".")) { var component = DataBinder.GetDataItem(controlContainer); return DataBinder.Eval(component, DataField); } return base.GetValue(controlContainer); } }