GridView enlazado con Propiedades de la clase anidada

Tengo un mapa de objeto similar a lo que se detalla a continuación. Cuando bash vincular las propiedades de NestedClass en un GridView obtengo el error:

“Un campo o propiedad con el nombre ‘NestedClass.Name’ no se encontró en la fuente de datos seleccionada.”

GridView está vinculado a ObjectDataSource y ObjectDataSource está vinculado a una instancia completamente poblada de BoundClass.

¿Hay alguna forma de evitar esto?

Clases de muestra:

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

Solo las propiedades inmediatas de una instancia se pueden mostrar en una columna de BoundField.

En su lugar, debe usar DataBinder.Eval en una plantilla de elemento para acceder a la propiedad anidada en lugar de asignarla a un límite.

Ejemplo:

   

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

Alternativamente, puede crear una clase personalizada que herede BoundField y anule GetValue para usar DataBinder.Eval, como se describe en esta publicación del blog:

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

Esta extensión en BoundField llama a DataBinder.Eval() , que admite propiedades anidadas:

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