Skip to content

数据源属性

此特性为活字格V9.0.100.0新增功能

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

csharp
    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;
        }
    }

在设计器中效果如下

1693553656620-f08f1447-7435-4970-9ada-f7aa7c871abf.png

执行结果如下
1693553692128-6ba2088d-30db-4863-82a6-af6fa770d875.png

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

  1. 预置数据列
    1. 设置BindingDataSourcePropertyAttribute 的 Columns 属性
    2. 代码
      格式:列名|列名2...
csharp
    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. 设计器效果  

1693553781787-0676d50c-d3e7-4586-89bb-b37f0aa35467.png 2. 为预置数据列添加显示文本 1. 设置BindingDataSourcePropertyAttribute 的 Columns 属性 2. 代码
格式:列名:显示名|列名2:显示名|...

csharp
    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. 设计器效果  

1693553873453-5f7a4c66-6c54-46f3-9f3c-bec7c5f3a2a0.png 4. 注意,设置显示文本不影响数据处理,只影响在设计器中的显示
1693553913205-dd284f15-3bc6-4fc5-81b0-387a12eed0c0.png 5. 如果在此模式下仍然需要添加自定义列,可以设置AllowAddCustomColumns属性

csharp
    public class MyPluginServerCommand : Command, ICommandExecutableInServerSideAsync
    {
        [BindingDataSourceProperty(AllowAddCustomColumns = true, 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;
        }
    }
6. 设置AllowAddCustomColumns之后效果如下(此特性需要活字格版本大于等于9.0.100.0)  

1693548268999-10b7f0f6-da74-48bc-adf5-d39fff17c475.png 3. 为预置数据源列添加描述信息 1. 设置BindingDataSourcePropertyAttribute 的 ColumnsDescription 属性 2. 代码
格式:列名:描述|列名2:描述2...

csharp
    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. 设计器效果  

1693553983859-e3e9cc9a-2397-4957-9cee-f3aefede38d2.png 4. 注意,需要和Columns属性配合使用,在Columns里没有的列,设置的描述会被忽略 4. 开启树结构查询配置(ID/PID 结构) 1. 什么是ID/PID结构 1. 在数据库中,是用二维表保存数据的,但是现实生活中,很多数据会有父子关系,例如公司的组织机构,会在数据库中保存为如下形式,这样就可以使用二维表表示树结构了。

ID名称PID
1xx公司
2财务部1
3销售部1
4销售一组3
5销售二组3
2. 设置BindingDataSourcePropertyAttribute 的 IsIdPidStructure 属性为True声明接受树结构表
3. 代码
csharp
    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. 设计器效果  

会在其他标签页中增加“树形结构查询配置的选项”
1669521580422-7663e8d1-7041-4312-8e14-4c69695358b6.png 5. 注意,开启树形结构查询配置IsIdPidStructure属性后,需要配合设置 TreeIdColumnName 和 TreePidColumnName 属性

更新: 2023-11-02 09:49:14
原文: https://www.yuque.com/robert-bh51n/ea8l6c/obu7igndbng0s3v7