GridView bound with Properties of nested class
Only immediate properties of an instance can be displayed in a BoundField column.
One must instead use DataBinder.Eval in an itemtemplate to access the nested property instead of assigning it to a boundfield.
Example:
<asp:TemplateField> <itemtemplate> <p><%#DataBinder.Eval(Container.DataItem, "NestedClass.Name")%></p> </itemtemplate></asp:TemplateField>
Alternatively, you can create a custom class which inherits BoundField and overrides GetValue to use DataBinder.Eval, as described in this blog post:
This extension on BoundField calls DataBinder.Eval()
, which does support nested properties:
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); }}