C# 使用nameof在Devexpress Gridcontrol绑定中指定字段名

C# 使用nameof在Devexpress Gridcontrol绑定中指定字段名,c#,winforms,devexpress,nameof,C#,Winforms,Devexpress,Nameof,我正在我的应用程序中使用Devexpress Gridcontrol,它的开发速度非常快,随着需求变得更加清晰/不断发展,这通常涉及重构、更改属性名称等 由于属性名称硬编码到form.designer.cs文件中的字符串中,因此重构非常困难。我使用Resharper,我知道您可以选择框来搜索字符串文字,但是当文本是Description或Manufacturer时,在我的项目中,这会以不相关的字符串文字出现数百次,因此实现这种方法将非常耗时,坦率地说是浪费时间 使用nameof操作符可以在显式指

我正在我的应用程序中使用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);
但现在我无法打开此表单的设计器,错误代码为“设计器无法处理第125行的未知名称”。方法InitializeComponent中的代码由设计器生成,不应手动修改


是否有任何方法可以将nameof表达式用于Devexpress字段名?

您不应该在*.designer.cs文件中进行任何重构,因为

方法InitializeComponent中的代码由设计器生成,不应手动修改

此限制的主要原因是基础设施基于С/VB语法的受限子集。因此,它不支持某些特定的语言功能,例如nameof。查看以了解允许使用哪些表达式,或联系以了解更多信息

关于DevExpres GridControl列自定义,我建议您考虑支持的事实,它允许您指定列的显示、格式化和验证方式,而无需设计时自定义。您应该只在DTO级别应用特定注释,然后将这些对象集合直接分配给GridControl的DataSource属性:

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

您收到的编译错误是什么?@JonathonChase问题已更新。您可以在静态类中声明常量,如public const string Manufacturer=nameofManufacturer;使用它,但我有点担心,当开发人员第一次在设计视图中打开表单时,代码会被覆盖。@JonathonChase这正是我所关心的,只要在设计器中进行更改,这些更改就会被覆盖。我肯定Devexpress会想到这样的事情?我只是在任何文档中都找不到它。您可以在非DevXPress控件中使用nameof吗?