[]
        
(Showing Draft Content)

数据源属性

如果属性绑定数据表的值,希望通过数据对话框编辑,可以通过标注BindingDataSourcePropertyAttribute 的方式设置。

注意,标注BindingDataSourcePropertyAttribute的属性类型必须是 object。

    public class MyPluginServerCommand : Command, ICommandExecutableInServerSideAsync
    {
        [BindingDataSourceProperty]
        [DisplayName("数据源")]
        public object DataSource { get; set; }

        public async Task<ExecuteResult> ExecuteAsync(IServerCommandExecuteContext dataContext)
        {
            var value = await dataContext.GetBindingDataSourceValueAsync(this.DataSource);
            var result = new ExecuteResult();

            result.ReturnValues.Add("结果", value);

            return result;
        }

        public override CommandScope GetCommandScope()
        {
            return CommandScope.ExecutableInServer;
        }
    }

在设计器中效果如下:

image

执行结果如下:

image

如果需要更细致的控制,可以通过BindingDataSourcePropertyAttribute的其他属性来控制。

1. 预置数据列

  1. 设置BindingDataSourcePropertyAttribute 的 Columns 属性。

  2. 代码:

    格式:列名|列名2...

        public class MyPluginServerCommand : Command, ICommandExecutableInServerSideAsync
        {
            [BindingDataSourceProperty(Columns = "ID|Name")]
            [DisplayName("数据源")]
            public object DataSource { get; set; }
    
            public async Task<ExecuteResult> ExecuteAsync(IServerCommandExecuteContext dataContext)
            {
                var value = await dataContext.GetBindingDataSourceValueAsync(this.DataSource);
                var result = new ExecuteResult();
    
                result.ReturnValues.Add("结果", value);
    
                return result;
            }
    
            public override CommandScope GetCommandScope()
            {
                return CommandScope.ExecutableInServer;
            }
        }
  3. 设计器效果:

    image

2. 为预置数据列添加显示文本

  1. 设置BindingDataSourcePropertyAttribute 的 Columns 属性。

  2. 代码:

    格式:列名:显示名|列名2:显示名|...

        public class MyPluginServerCommand : Command, ICommandExecutableInServerSideAsync
        {
            [BindingDataSourceProperty(Columns = "ID|Name:姓名|Age:年龄")]
            [DisplayName("数据源")]
            public object DataSource { get; set; }
    
            public async Task<ExecuteResult> ExecuteAsync(IServerCommandExecuteContext dataContext)
            {
                var value = await dataContext.GetBindingDataSourceValueAsync(this.DataSource);
                var result = new ExecuteResult();
    
                result.ReturnValues.Add("结果", value);
    
                return result;
            }
    
            public override CommandScope GetCommandScope()
            {
                return CommandScope.ExecutableInServer;
            }
        }
  3. 设计器效果:

    image

  4. 注意:设置显示文本不影响JavaScript端数据处理,只影响在设计器中的显示。

    image

  5. 如果在此模式下仍然需要添加自定义列,可以设置AllowAddCustomColumns属性。

        public class MyPluginCellType : CellType
        {
            [BindingDataSourceProperty(AllowAddCustomColumns = true, Columns = "ID|Name:姓名|Age:年龄")]
            [DisplayName("绑定数据源")]
            public object DataSource { get; set; }
        }
  6. 设置AllowAddCustomColumns之后效果如下(此特性需要活字格版本大于等于9.0.100.0)。

    image

3. 为预置数据源列添加描述信息

  1. 设置BindingDataSourcePropertyAttribute 的 ColumnsDescription 属性。

  2. 代码:

    格式:列名:描述|列名2:描述2...

        public class MyPluginServerCommand : Command, ICommandExecutableInServerSideAsync
        {
            [BindingDataSourceProperty(Columns = "ID|Name|Age", ColumnsDescription = "ID:通常绑定主键列|Age:表示年龄列")]
            [DisplayName("数据源")]
            public object DataSource { get; set; }
    
            public async Task<ExecuteResult> ExecuteAsync(IServerCommandExecuteContext dataContext)
            {
                var value = await dataContext.GetBindingDataSourceValueAsync(this.DataSource);
                var result = new ExecuteResult();
    
                result.ReturnValues.Add("结果", value);
    
                return result;
            }
    
            public override CommandScope GetCommandScope()
            {
                return CommandScope.ExecutableInServer;
            }
        }
  3. 设计器效果:

    image

  4. 注意,需要和Columns属性配合使用,在Columns里没有的列,设置的描述会被忽略。

4. 开启树结构查询配置(ID/PID 结构)

  1. 什么是ID/PID结构

    在数据库中,是用二维表保存数据的,但是现实生活中,很多数据会有父子关系,例如公司的组织机构,会在数据库中保存为如下形式,这样就可以使用二维表表示树结构了。

    ID

    名称

    PID

    1

    xx公司


    2

    财务部

    1

    3

    销售部

    1

    4

    销售一组

    3

    5

    销售二组

    3

  2. 设置BindingDataSourcePropertyAttribute 的 IsIdPidStructure 属性为True声明接受树结构表。

  3. 代码:

        public class MyPluginServerCommand : Command, ICommandExecutableInServerSideAsync
        {
            [BindingDataSourceProperty(Columns = "ID|Name|PID", IsIdPidStructure = true, TreeIdColumnName = "ID", TreePidColumnName = "PID")]
            [DisplayName("数据源")]
            public object DataSource { get; set; }
    
            public async Task<ExecuteResult> ExecuteAsync(IServerCommandExecuteContext dataContext)
            {
                var value = await dataContext.GetBindingDataSourceValueAsync(this.DataSource);
                var result = new ExecuteResult();
    
                result.ReturnValues.Add("结果", value);
    
                return result;
            }
    
            public override CommandScope GetCommandScope()
            {
                return CommandScope.ExecutableInServer;
            }
        }
  4. 设计器效果:

    会在其他标签页中增加“树形结构查询配置”的选项。

    image

  5. 注意:开启树形结构查询配置IsIdPidStructure属性后,需要配合设置 TreeIdColumnName 和 TreePidColumnName 属性。