c# asp.net gridview objectdatasource

c# - GridView enlazado con Propiedades de la clase anidada



asp.net objectdatasource (2)

Tengo un mapa de objeto similar a lo que se detalla a continuación. Cuando intento 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; } }


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


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:

<asp:TemplateField> <itemtemplate> <p><%#DataBinder.Eval(Container.DataItem, "NestedClass.Name")%></p> </itemtemplate> </asp:TemplateField>

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