В целом, лучший подход - это подготовить объекты для GridView в точном формате, который вам нужен.
Создайте новый класс, который содержит все свойства, которые необходимы GridView, и для избежания большого количества кода, который преобразует данные, вы можете использовать AutoMapper или аналогичную библиотеку.
public class ProjectDisplayDto
{
// all properties from the Project class
public string ClientName { get; set; }
}
ВКонфигурация AutoMapper, вам просто нужно создать сопоставление.Свойства, которые имеют одинаковые имена и типы, будут сопоставлены автоматически.Вам нужно только определить правила для сопоставления дополнительных.
mapper.CreateMap<Project, ProjectDisplayDto>()
.ForMember(p => ClientName, m => m.MapFrom(p => ...)); // tell AutoMapper how to get the client name
Если вы используете Entity Framework и класс Project
является сущностью, вероятно, в этом классе будет присутствовать свойство навигации клиента.Если Client
имеет свойство Name, AutoMapper автоматически определит сопоставление, поэтому вам даже не нужно настраивать правило для свойства ClientName
.
При таком подходе это может выглядеть таксоздано много ненужных классов.Но в случае более крупных приложений я вижу это как преимущество, потому что часто вам нужно добавить столбец на одном экране и иметь отдельный класс для этого, что означает, что вы не влияете на другие экраны в приложении.