c# - 在 Devexpress Gridcontrol 绑定中使用 nameof 指定 FieldName
问题描述
我在我的应用程序中使用 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);
但是现在我无法打开此表单的设计器,错误代码'设计器无法nameof
在第 125 行处理未知名称。方法 InitializeComponent 中的代码由设计器生成,不应手动修改。
有什么方法可以为 Devexpress 字段名称使用 nameof 表达式?
解决方案
您永远不应该在*.designer.cs
文件中进行任何重构,因为
InitializeComponent 方法中的代码由设计者生成,不应手动修改
这种限制的主要原因是Code-Dom 序列化基础结构是基于С#/VB 语法的受限子集。因此它不支持某些特定的语言功能,例如nameof
. 查看CSharpCodeProvider以了解允许使用哪些表达式或联系Visual Studio 团队以获取更多信息。
关于 DevExpres GridControl 列的自定义,我建议您考虑GridControl支持广泛的注释属性这一事实,它允许您指定如何显示、格式化和验证您的列,而无需设计时自定义。您应该只在 DTO 级别应用特定注释,然后将这些对象集合直接分配给 GridControl 的 DataSource 属性:
public class CrossRef{
[Display(Name = "MANUFACTURER")]
[...]
public string Manufacturer { get; set; }
}
// ...
gridControl1.DataSource = new BindingList<CrossRef> {
new CrossRef() { Manufacturer = ... },
...
};
推荐阅读
- reactjs - 如何使用 msw 有条件地模拟错误响应
- datatables - JQuery Datatables按表头中的href排序侦听器
- php - 根据订单 ID WooCommerce 将订阅状态更改为活动
- laravel - 在 Laravel 中查询表并将结果分组到范围中
- javascript - 如何在一次单击时播放两个单独的动画?
- python - Windows:使用 Python (3.6.0+) 支持编译的 Vim
- signalr - 尝试建立组连接时 Azure SignalR InvokeAsync 挂起
- amazon-web-services - 通过从 S3 读取电子邮件地址发送电子邮件
- python - 在 django 多租户中显示主页
- r - Shiny:错误:尝试渲染第二个依赖图时,quartz() 设备大小无效