在 Devexpress Gridcontrol 绑定中使用 nameof 指定 FieldName
Using nameof for specifying FieldName in Devexpress Gridcontrol binding
我在我的应用程序中使用 Devexpress Gridcontrol,它的开发速度非常快,随着需求变得更加清晰/发展,这通常涉及重构、更改 属性 名称等。
因为 属性 名称被硬编码到 form.designer.cs
文件中的字符串中,这使得重构变得非常困难。我使用 Resharper,我知道你可以 select 框来搜索字符串文字,但是当文本是 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 行处理未知名称 nameof
”。InitializeComponent 方法中的代码由设计器生成,不应手动生成已修改。
Devexpress 字段名称有没有使用 nameof 表达式的方法?
您永远不应该在 *.designer.cs
文件中进行任何重构,因为
The code within the method InitializeComponent is generated by the designer and should not be manually modified
此限制的主要原因Code-Dom serialization infrastructure is based on the restricted subset of С#/VB syntax. Thus it does not support some specific language features e.g. nameof
. Take a look at the CSharpCodeProvider to learn which expressions are allowed or contact the Visual Studio Team了解更多信息。
关于 DevExpres GridControl 列自定义,我建议您考虑以下事实:GridControl supports the wide range of annotation attributes 允许您指定如何显示、格式化和验证列,而无需设计时自定义。您应该只在 DTO 级别应用特定注释,然后将这些对象集合直接分配给 GridControl 的数据源 属性:
public class CrossRef{
[Display(Name = "MANUFACTURER")]
[...]
public string Manufacturer { get; set; }
}
// ...
gridControl1.DataSource = new BindingList<CrossRef> {
new CrossRef() { Manufacturer = ... },
...
};
我在我的应用程序中使用 Devexpress Gridcontrol,它的开发速度非常快,随着需求变得更加清晰/发展,这通常涉及重构、更改 属性 名称等。
因为 属性 名称被硬编码到 form.designer.cs
文件中的字符串中,这使得重构变得非常困难。我使用 Resharper,我知道你可以 select 框来搜索字符串文字,但是当文本是 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 行处理未知名称 nameof
”。InitializeComponent 方法中的代码由设计器生成,不应手动生成已修改。
Devexpress 字段名称有没有使用 nameof 表达式的方法?
您永远不应该在 *.designer.cs
文件中进行任何重构,因为
The code within the method InitializeComponent is generated by the designer and should not be manually modified
此限制的主要原因Code-Dom serialization infrastructure is based on the restricted subset of С#/VB syntax. Thus it does not support some specific language features e.g. nameof
. Take a look at the CSharpCodeProvider to learn which expressions are allowed or contact the Visual Studio Team了解更多信息。
关于 DevExpres GridControl 列自定义,我建议您考虑以下事实:GridControl supports the wide range of annotation attributes 允许您指定如何显示、格式化和验证列,而无需设计时自定义。您应该只在 DTO 级别应用特定注释,然后将这些对象集合直接分配给 GridControl 的数据源 属性:
public class CrossRef{
[Display(Name = "MANUFACTURER")]
[...]
public string Manufacturer { get; set; }
}
// ...
gridControl1.DataSource = new BindingList<CrossRef> {
new CrossRef() { Manufacturer = ... },
...
};