Если я не ошибаюсь, он показывает результат вызова .ToString () для вашего subObject, так что вы можете переопределить это, чтобы вернуть содержимое Description.
Вы пытались просто привязать Value1.Description? (Я предполагаю, что это не работает).
У меня есть класс, который можно использовать вместо List при связывании, который будет обрабатывать это, он реализует ITypedList, который позволяет коллекции предоставлять больше «свойств» для своих объектов, включая вычисляемые свойства.
Последняя версия имеющихся у меня файлов:
https://gist.github.com/lassevk/64ecea836116882a5d59b0f235858044
Для использования:
List<rootClass> yourList = ...
TypedListWrapper<rootClass> bindableList = new TypedListWrapper<rootClass>(yourList);
bindableList.BindableProperties = "Value1;Value2.Description;Value3.Description";
gridView1.DataSource = bindableList;
По сути, вы привязываетесь к экземпляру TypedList<T>
вместо List<T>
и настраиваете свойство BindableProperties. У меня есть некоторые изменения в работе, в том числе одно, которое просто автоматически создает BindableProperties, но его пока нет в транке.
Вы также можете добавить рассчитанные свойства, например:
yourList.AddCalculatedProperty<Int32>("DescriptionLength",
delegate(rootClass rc)
{
return rc.Value2.Description.Length;
});
или с .NET 3.5:
yourList.AddCalculatedProperty<Int32>("DescriptionLength",
rc => rc.Value2.Description.Length);