要添加数据表列属性,目前没有直接标注Attribute生成的办法可以添加,需要通过实现Designer的 GetEditorSetting 方法实现。
示例代码如下:
[Designer("MyPlugin.Designer.MyPluginCommandDesigner, MyPlugin")] public class MyPluginCommand : Command { [DisplayName("表名")] public string TableName { get; set; } [DisplayName("列名")] public string ColumnName { get; set; } }
修改 Designer\MyPluginCommandDesigner.cs 示例代码如下:
using GrapeCity.Forguncy.Commands; using GrapeCity.Forguncy.Plugin; using System.Collections.Generic; using System.ComponentModel; using System.Linq; namespace MyPlugin.Designer { public class MyPluginCommandDesigner : CommandDesigner<MyPluginCommand> { public override EditorSetting GetEditorSetting(PropertyDescriptor property, IBuilderCommandContext builderContext) { if (property.Name == nameof(MyPluginCommand.TableName)) { return new TableComboTreeSelectorEditorSetting(); } if (property.Name == nameof(MyPluginCommand.ColumnName)) { return new ColumnNameEditorSetting(builderContext, GetColumns(builderContext)); } return base.GetEditorSetting(property, builderContext); } public override void OnPropertyEditorChanged(string propertyName, object propertyValue, Dictionary<string, IEditorSettingsDataContext> properties) { if(propertyName == nameof(MyPluginCommand.TableName)) { var columnSetting = properties[nameof(MyPluginCommand.ColumnName)]; if(columnSetting.EditorSetting is ColumnNameEditorSetting comboSetting) { comboSetting.Source = GetColumns(comboSetting.BuilderContext); } } base.OnPropertyEditorChanged(propertyName, propertyValue, properties); } private List<string> GetColumns(IBuilderCommandContext builderContext) { var tableInfo = builderContext.EnumAllTableInfos().FirstOrDefault(i => i.TableName == this.Command.TableName); if(tableInfo != null) { return tableInfo.Columns.Select(i => i.ColumnName).ToList(); } return new List<string>(); } } class ColumnNameEditorSetting: ComboEditorSetting { public IBuilderCommandContext BuilderContext { get; set; } public ColumnNameEditorSetting(IBuilderCommandContext builderContext, List<string> columns) : base(columns) { BuilderContext = builderContext; } } }
代码说明:
- 重写 GetEditorSetting 方法
- 判断属性名为 TableName 时,返回 TableComboTreeSelectorEditorSetting。
- 判断属性名为 ColumName 时,返回 ColumnNameEditorSetting (自定义类型,从 ComboEditorSetting 派生,主要目的是缓存 IBuilderCommandContext)。
- 重写 OnPropertyEditorChanged 方法
- 在 TableName 变化时,清空 ColumnName属性的值,并根据新的TableName值重写设置下拉列表。
最终设计时效果: