代码之家  ›  专栏  ›  技术社区  ›  Brendan Gooden

在Devexpress Gridcontrol绑定中使用nameof指定FieldName

  •  0
  • Brendan Gooden  · 技术社区  · 8 年前

    因为属性名在 form.designer.cs 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中的代码由设计器生成,不应手动修改。

    对于Devexpress字段名,有没有使用nameof表达式的方法?

    1 回复  |  直到 8 年前
        1
  •  1
  •   DmitryG    8 年前

    您不应该在 *.designer.cs 文件,因为

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

    这种限制的主要原因是 Code-Dom serialization 基础设施基于 /VB语法的限制子集 . 因此它不支持某些特定的语言特性,例如。 nameof . 看一看这个 CSharpCodeProvider 要了解哪些表达式是允许的,请联系 Visual Studio Team 更多信息。

    关于devexpresgridcontrolcolumns定制,我建议您考虑以下事实 GridControl wide range of annotation attributes 它允许您指定如何显示、格式化和验证列,而无需进行设计时自定义。您应该只在DTO级别应用特定注释,然后将这些对象集合直接分配给GridControl的DataSource属性:

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