# 窗体界面设计

> 模块的主要功能：
> - 配置模块的数据集信息
> - 配置模块的界面信息
> - 调用模块配置，配置模块的Grid查询、Form查询、数据权限及多语言信息

## 数据源配置

> 数据源配置部分主要介绍下面几个配置：
> - 数据集定义
> - 表配置信息
> - 列配置信息
> - 关键字信息

### 数据集定义

> 定义执行数据库操作的增删查改语句。

**界面**

![](./static/images/02_01.png)

**配置项说明**

|配置项|配置项说明|
|-|-|
|数据集名称|一个模块中数据集的唯一标识，代码中根据数据集名称来执行数据集|
|数据库组别名|指明该数据集定义SQL语句将要在哪个数据库中执行|
|超时间隔|超时间隔有两层意思：1、客户端与应用层连接时间；2、SQL语句执行时间|
|数据库表名|获取到的数据表的逻辑表名，select语句必须配置，多个用英文逗号分隔|
|sql语句|数据集要执行的SQL语句，多个用英文分号分隔。如果是select语句，个数要与表名个数一直|
|表关系名称|获取到的DataSet中各个表之间的Relation名称，多个用英文逗号分隔，支持多语言|
|表关系|获取到的DataSet中各个表之间的Relation关系表达式，个数要与表关系名称一致|

### 表配置信息

> 如果表需要保存，一般需要配置表配置信息。

**界面**

![](./static/images/02_02.png)

**配置项说明**

|配置项|配置项说明|
|-|-|
|数据集名称|表所属的数据集的名称|
|数据库表名|数据集定义中配置的表的逻辑名称|
|物理数据库表名|获取到的表在数据库中的表名，因为要保存，必须知道真正的表名|
|主键|表中能唯一确定一条记录的列组合，形成update、delete语句时使用|
|是否增加行状态|是否增加一个名为RowState的列。用于区分新增行和新增修改行；同时用于修改行的前景色|
|顺序分组依据|保存时如果自动排序，需要先按照顺序分组依据列进行分组，然后再自动排序|

### 列配置信息

> 列配置信息主要有以下几点作用：
> - 如果表保存，一般需要配置列配置信息
> - 如果在WnGrid、WnTreeGrid、WnPivot上显示，用于配置列的相关属性

**界面**

![](./static/images/02_03.png)


**配置项说明**

|配置项|配置项说明|
|-|-|
|数据集名称|列所属的数据集|
|数据库表名|列所数据的表|
|字段名|列的名称，与select子句中的一致|
|列标题|如果在WnGrid等显示时，用户看到的名称，支持多语言|
|标题位置|列标题显示的位置|
|默认值|当新增行时列的默认值，支持关键字，格式为｛defaultvalue｝。如果未Guid则配置为newid()|
|数据格式|列数据的显示格式，仅对日期类型和数值类型有效|
|汇总类型|列汇总值得类型|
|区域|WnPivot使用，设定当前列是在WnPivot的哪个区域|
|宽度|列的宽度，因为同样的意思不同语言的长度可能相差挺大，因此支持多语言配置|
|过滤配置信息|正常情况下该配置信息都是自动生成，但如果不能满足需求，需要手动配置，例如列为Form查询的时候|
|公式表达式|多列之间的计算公式，需要配置在参与计算的列上|
|自定义汇总|对列的汇总值进行二次计算的公式表达式|
|列标题前景色|列标题文本颜色|
|列标题背景色|列标题背景色|
|保存标记|确定列是否保存|
|是否只读|确定列是否能编辑|
|是否显示|确定列是否可见，一般不可见列都设置为只读的|
|是否顺序列|保存时是否给该列自动排序。一个表只能有一个列为顺序列，类型必须为数值类型，需要配置默认值-1|
|是否复制项|WnGrid新增行时，如果开启复制功能，则会自动复制是否复制项为true的列的值|
|是否允许鼠标滚动|针对数值和日期列，确定是否可以通过鼠标滚动改变值|
|是否冻结|确定列是否锁定在左边，类似于Excel的列冻结|
|是否自动换行|开启后如果数据量过大时会造成页面加载过慢，慎用|
|自动适应列宽|确定列宽度是否根据内容自动调整，开启后如果数据量过大时会造成页面加载过慢，慎用|
|是否参与过滤|在WnGrid生成过滤字符串的时候，确定该列是否参与生成|
|Grid查询代码|配置后该列将变为Grid查询|
|Form查询代码|配置后该列将变为Form查询|
|查询结果列|Grid查询和Form查询使用，确定使用查询结果集的哪一列的值作为列的背后值|
|查询显示列|Grid查询使用，确定使用查询结果集的哪一列的值作为列的显示值|
|重新查询列名|Form查询使用，Form查询多远并且不生成多行时配置，用于恢复已选值|
|替换关键字|Form查询使用，用于替换SQL语句中的关键字，格式：{关键字}=wnGrid列名，多个用英文逗号分隔|
|回填规则|Grid查询和Form查询使用，格式：winGrid列名=返回的数据集字段，多个用英文逗号分隔|
|下拉列表值|配置后该列将变为下拉列表|
|列表查询值|配置后该列将变为列表查询|
|是否添加多行|Form查询使用，多选的Form查询是否根据选择的结果生成多行|
|是否接受额外值|Form查询和下拉列表使用，是否允许接受数据源以外的值|
|是否手动定位|列表查询和Grid查询使用，是否允许手动录入部分内容来快速定位|

### 关键字信息

> 该功能主要是针对通过模块的。使通用模块可以根据不同的业务类型代码执行不同的SQL语句。

**界面**

![](./static/images/02_04.png)

**配置项说明**

|配置项|配置项说明|
|-|-|
|关键字名称|前面卡片页中配置的关键字，例如数据集的SQL语句，数据库组别名等|
|业务类型代码|业务类型代码，与关键字名称配合来获取关键字的值|
|关键字值|关键字的值，允许包含普通的关键字|

## Wn组件配置

> 用来动态配置构建模块的界面。

**界面**

![](./static/images/02_05.png)

### 菜单功能说明

|菜单项|功能说明|
|-|-|
|展开|展开选中节点及其所有子孙节点|
|收缩|收缩选中节点及其所有子孙节点|
|向下选择|勾选当前选中节点，并且递归选中其所有子孙节点|
|向上选择|勾选当前选中节点，并且递归选中所有父级节点|
|全清|清除所有选中节点|
|是否自动生成|确定当前节点的父级节点执行Assemble方法时是否自动加载|
|移除|删除选中节点及其所有子孙节点|
|保存|保存配置信息到数据库|
|锁定|锁定勾选的节点，防止误修改|
|解锁|解锁勾选的节点，进行修改|
|加载|根据勾选的节点加载界面，窗体必须选择。选择两个以上窗体时，只加载位置靠前的窗体|
|模块配置|打开模块配置界面进行配置|
|自动大小|当容器类控件设置允许自动宽度和高度后，选择容器后点击自动大小，将会按照其子元素来自动调整容器的大小|
|清理垃圾数据|每次移除都有可能产生一些垃圾数据，点击此按钮将移除所有的垃圾数据|
|引入控件|快速引入类似的窗体来构建界面|
|代码生成|自动生成勾选的控件的初始化语句及选择的事件注册语句|
|控件生成|根据Word文档信息，生成对应的控件|
|控件布局|对界面进行布局|

### 控件引入

> 复制类似的窗体界面，快速构建界面

**界面**

![](./static/images/02_06.png)

### 代码生成

> 生成所选控件的初始化代码及相关事件的注册代码。
>
> 如果没有勾选控件，打不开代码生成窗体

**界面**

![](./static/images/02_07.png)

### 控件生成

> 根据配置信息自动生成相关的控件
> 
> 配置信息可以来源于Word文档，格式和数据库设计格式要求一致
> 
> 如果当前选择的不是容器控件，打不开控件生成窗体

**界面**

![](./static/images/02_08.png)

### 控件布局

> 对容器控件内的单值控件进行排版布局
> 
> 如果选择的不是容器控件，打不开控件布局窗体

**界面**

![](./static/images/02_09.png)

## 模块配置

> 配置当前模块使用的Grid查询、Form查询、数据权限和多语言配置

### Grid查询

> Grid查询定义信息，用于初始化Grid查询的下拉数据源
> 
> Grid查询参考：[Grid查询专题](../winformspecial/gridlookup.md)

**界面**

![](./static/images/02_10.png)

### Form查询

> Form查询定义信息
> 
> Form查询参考：[Form查询专题](../winformspecial/formlookup.md)

**界面**

![](./static/images/02_11.png)

### 数据权限

> 数据权限定义
> 
> 参考：[数据权限专题](../winformspecial/dataright.md)

**界面**

![](./static/images/02_12.png)

### 语言对照管理

> 管理模块用到的多语言信息

**界面**

![](./static/images/02_13.png)

**配置项说明**
|配置项|配置项说明|
|-|-|
|代码|根据代码来匹配对应的多语言信息|
|内容|多语言内容信息|