Использование nameof для указания FieldName в привязке Devexpress Gridcontrol - PullRequest
0 голосов
/ 20 сентября 2018

Я использую Devexpress Gridcontrol в своем приложении, которое развивается довольно быстрыми темпами, и это часто включает рефакторинг, изменение имен свойств и т. Д., Поскольку требования становятся более ясными / развивающимися.

Поскольку имена свойств жестко закодированы в строку в файле form.designer.cs, это очень затрудняет их использование при рефакторинге.Я использую Resharper, и я знаю, что вы можете выбрать поле для поиска в строковых литералах, но когда текст Description или Manufacturer, это встречается сотни раз в несвязанных строковых литералах по всему моему проекту, так что реализация этого способа будетотнимает много времени и, откровенно говоря, трата времени.

Использование оператора nameof обеспечивает мост между явным указанием имен полей, а также предоставляет встроенную поддержку для рефакторинга.

Возьмите этот фрагмент измой файл конструктора.

// 
// colManufacturer
// 
this.colManufacturer.Caption = "Manufacturer";
this.colManufacturer.ColumnEdit = this.xrefManufacturerSearch;
this.colManufacturer.FieldName = "Manufacturer";
this.colManufacturer.Name = "colManufacturer";
this.colManufacturer.Visible = true;
this.colManufacturer.VisibleIndex = 1;

Если я заменил атрибут FieldName на

this.colManufacturer.FieldName = nameof(CrossRef.Manufacturer);

Но теперь я не могу открыть конструктор для этой формы, код ошибки 'Конструктор не может обработать неизвестноеname nameof в строке 125. Код в методе InitializeComponent создается конструктором и не должен изменяться вручную.

Можно ли использовать выражения nameof для имен полей Devexpress?

1 Ответ

0 голосов
/ 20 сентября 2018

Никогда не следует выполнять рефакторинг в файлах *.designer.cs из-за

Код в методе InitializeComponent создается конструктором и не должен изменяться вручную

Основная причина этого ограничения в том, что инфраструктура сериализации Code-Dom основана на ограниченном подмножестве синтаксиса С # / VB .Таким образом, он не поддерживает некоторые особенности языка, например nameof.Взгляните на CSharpCodeProvider , чтобы узнать, какие выражения разрешены, или свяжитесь с Visual Studio Team для получения дополнительной информации.

Что касается настройки столбцов DevExpres GridControl, я предлагаю вамПримите во внимание тот факт, что GridControl поддерживает широкий диапазон атрибутов аннотаций , который позволяет вам указать, как ваши столбцы будут отображаться, форматироваться и проверяться без настройки времени разработки вообще.Вы должны применять только определенные аннотации на уровне DTO, а затем назначать коллекцию этих объектов непосредственно свойству DataSource GridControl:

public class CrossRef{
    [Display(Name = "MANUFACTURER")]
    [...]
    public string Manufacturer { get; set; }
}
// ...
gridControl1.DataSource = new BindingList<CrossRef> {
    new CrossRef() { Manufacturer = ... },
    ...
};
...