基于Extjs的web表单设计器 第二节——表单控件设计

  这一节介绍表单设计器的常用控件的设计。

  在前面两章节的附图中我已经给出了表单控件的两大分类:区域控件、常用控件。这里对每个分类以及分类所包含的控件的作用进行一一的介绍,因为它们很重要,是表单设计器的基本元素,更是核心组成部门。

  一、区域控件,它主要包含三个类型的控件:卡片区域、表格区域、混合区域。这三个控件是我们的其他控件的容器或者叫包装器,相当于VS里面的各种Panel。它们很重要,每种区域控件的作用都不一样,能够包含的控件类型也不大一样,它们三个区域相互配合使用,可以为我们的表单提供强大的支持,各种复杂的表单都可以设计出来。除了容器作用之外,其实它们还对应着表单在数据库后台的存储结构,可能是一张表。

    1. 卡片区域控件——它其实就是我们前面说的主表或者卡片表,它里面的控件一般都是多列横向布局。它可以包含除了所有区域控件之外的其他常用控件。这个区域控件一般所有的表单都会有。

    2. 表格区域控件——就是我们前面说的明细表(表格类型的容器),它里面的控件一般都会有多行数据。它也是可以包含除了所有区域控件之外的其他常用控件。该区域控件也是很常用的,一般也会出现在很多表单里面。

    3. 混合区域控件——我们不常用,但是非常最重要的一个控件。它的存在使我们设计出非常复杂的表单。该区域只能包含卡片区域、表格区域以及它自身类型的容器控件,其他常用的控件是不能拖放到该区域的。

  二、常用控件,该分组的控件是表单的最基本元素,这些控件的组合使用实现了表单所需要的功能。主要包含常用的日期、文本、多文本(可接受换行符,适合显示较多文本数据)、数字、金额、下拉树、单选、复选等控件。这里面应用最多和比较复杂的就是下拉树控件。说它复杂是因为单据的一些复杂的数据源都得靠它来实现(具体怎么实现每个控件的取数我们在后面的章节会详细介绍)。其他的这些控件对开发人员来说就不必在具体介绍了,通过名称我们就基本知道它的作用。

   通过上面的介绍我们大致知道了组成表单的控件的分类及每种控件的用法。这里介绍一下控件数据源的设计,控件列表分组我们可以直接在页面代码里面定义如下的ext 代码,给予每种控件一个类型的标注(如TreeStore 中的Model中定义的type字段,就是用来标记每种控件的类型)。

 1 <ext:TreePanel ID="controlRegion" Title="表单控件" runat="server" Region="West" RootVisible="false"
 2                 Width="200" Split="true" Collapsible="true" Collapsed="false">
 3                 <Store>
 4                     <ext:TreeStore ID="TreeStore1" runat="server">
 5                         <Model>
 6                             <ext:Model ID="Model1" runat="server">
 7                                 <Fields>
 8                                     <ext:ModelField Name="type" />
 9                                 </Fields>
10                             </ext:Model>
11                         </Model>
12                     </ext:TreeStore>
13                 </Store>
14                 <Root>
15                     <ext:Node NodeID="Root" Text="控件" Expanded="true">
16                         <Children>
17                             <ext:Node NodeID="type1" Text="区域控件" Expanded="true" AllowDrag="false">
18                                 <Children>
19                                     <ext:Node Leaf="true" Text="卡片区域">
20                                         <CustomAttributes>
21                                             <ext:ConfigItem Name="type" Value="Card" Mode="Value" />
22                                         </CustomAttributes>
23                                     </ext:Node>
24                                     <ext:Node Leaf="true" Text="表格区域">
25                                         <CustomAttributes>
26                                             <ext:ConfigItem Name="type" Value="Table" Mode="Value" />
27                                         </CustomAttributes>
28                                     </ext:Node>
29                                     <ext:Node Leaf="true" Text="混合区域">
30                                         <CustomAttributes>
31                                             <ext:ConfigItem Name="type" Value="Mixed" Mode="Value" />
32                                         </CustomAttributes>
33                                     </ext:Node>
34                                 </Children>
35                             </ext:Node>
36                             <ext:Node NodeID="type0" Text="常用控件" Expanded="true" AllowDrag="false">
37                                 <Children>
38                                     <ext:Node Leaf="true" Text="文本">
39                                         <CustomAttributes>
40                                             <ext:ConfigItem Name="type" Value="TextField" Mode="Value" />
41                                         </CustomAttributes>
42                                     </ext:Node>
43                                     <ext:Node Leaf="true" Text="多文本">
44                                         <CustomAttributes>
45                                             <ext:ConfigItem Name="type" Value="TextArea" Mode="Value" />
46                                         </CustomAttributes>
47                                     </ext:Node>
48                                     <ext:Node Leaf="true" Text="按钮" Icon="Button">
49                                         <CustomAttributes>
50                                             <ext:ConfigItem Name="type" Value="Button" Mode="Value" />
51                                         </CustomAttributes>
52                                     </ext:Node>
53                                     <ext:Node Leaf="true" Text="复选框" Icon="CheckError">
54                                         <CustomAttributes>
55                                             <ext:ConfigItem Name="type" Value="CheckBox" Mode="Value" />
56                                         </CustomAttributes>
57                                     </ext:Node>
58                                     <ext:Node Leaf="true" Text="单选框">
59                                         <CustomAttributes>
60                                             <ext:ConfigItem Name="type" Value="Radio" Mode="Value" />
61                                         </CustomAttributes>
62                                     </ext:Node>
63                                     <ext:Node Leaf="true" Text="数字">
64                                         <CustomAttributes>
65                                             <ext:ConfigItem Name="type" Value="NumberField" Mode="Value" />
66                                         </CustomAttributes>
67                                     </ext:Node>
68                                     <ext:Node Leaf="true" Text="金额">
69                                         <CustomAttributes>
70                                             <ext:ConfigItem Name="type" Value="MoneyField" Mode="Value" />
71                                         </CustomAttributes>
72                                     </ext:Node>
73                                     <ext:Node Leaf="true" Text="日期">
74                                         <CustomAttributes>
75                                             <ext:ConfigItem Name="type" Value="DateField" Mode="Value" />
76                                         </CustomAttributes>
77                                     </ext:Node>
78                                     <ext:Node Leaf="true" Text="下拉">
79                                         <CustomAttributes>
80                                             <ext:ConfigItem Name="type" Value="ComboBox" Mode="Value" />
81                                         </CustomAttributes>
82                                     </ext:Node>
83                                     <ext:Node Leaf="true" Text="下拉树">
84                                         <CustomAttributes>
85                                             <ext:ConfigItem Name="type" Value="NetDropDown" Mode="Value" />
86                                         </CustomAttributes>
87                                     </ext:Node>
88                                 </Children>
89                             </ext:Node>
90                         </Children>
91                     </ext:Node>
92                 </Root>
93             </ext:TreePanel>

但是为了方便扩展,我们通常需要一个描述控件分组和控件本身信息的Xml文件,通过取数接口加载到界面上,这样后期维护的时候只需要修改该文件就可以了。

在上面的代码中,我分别为每种控件第一个了类型,比如:卡片区域 type=Card,表格区域 type=Table,文本控件 type=TextField,金额控件 type=MoneyField等等。这里定义的内容会和我们后台代码定义的控件枚举类型匹配,为了方便我们把后台定义的控件类型也就定义为和这里一样的名称。

 1  /// <summary>
 2     /// 控件类型
 3     /// </summary>
 4     public enum ControlType
 5     {
 6         /// <summary>
 7         /// 文本框
 8         /// </summary>
 9         TextField = 0,
10         /// <summary>
11         /// 多文本框
12         /// </summary>
13         TextArea,
14         /// <summary>
15         /// 隐藏控件
16         /// </summary>
17         HiddenField,
18         /// <summary>
19         /// 数字
20         /// </summary>
21         NumberField,
22         /// <summary>
23         /// 金额
24         /// </summary>
25         MoneyField,
26         /// <summary>
27         /// 文本显示,不可编辑
28         /// </summary>
29         DisplayField,
30         /// <summary>
31         /// 日期控件
32         /// </summary>
33         DateField,
34         /// <summary>
35         /// 时间控件
36         /// </summary>
37         TimeField,
38         /// <summary>
39         /// 日期+时间控件
40         /// </summary>
41         DateTimeField,
42         /// <summary>
43         /// 下拉字典树
44         /// </summary>
45         NetDropDown,
46         /// <summary>
47         /// 下拉框
48         /// </summary>
49         ComboBox,
50         /// <summary>
51         /// 复选框
52         /// </summary>
53         CheckBox,
54         /// <summary>
55         /// 单选框
56         /// </summary>
57         Radio,
58         /// <summary>
59         /// 按钮
60         /// </summary>
61         Button,
62     }

控件类型枚举

 1     /// <summary>
 2     /// 表单分组块的类型
 3     /// </summary>
 4     public enum GroupType
 5     {
 6         /// <summary>
 7         /// 卡片 (主表)
 8         /// </summary>
 9         Card = 0,
10         /// <summary>
11         /// 明细表格
12         /// </summary>
13         Table,
14         /// <summary>
15         /// 混合区域
16         /// </summary>
17         Mixed,
18     }

区域分组控件

到这里我们基本定义和归纳了表单的容器控件和常用控件,下一节我介绍表单控件的拖放设计。

    

                         

时间: 2024-08-02 02:51:03

基于Extjs的web表单设计器 第二节——表单控件设计的相关文章

基于Extjs的web表单设计器 第一节

前面一节介绍了表单设计器的背景和最终的大概样式,本节主要介绍表单设计器的需求及功能设计. 在讲需求之前先明确几个常用的概念: 主表或者卡片表——具有多行多列的一个区域的控件块,如下图所示. 明细表——就是常用的表格类型的控件块,表头信息就确立了该列的数据类型,如下图所示. 卡片式的表:指的是一个表单模板只包括一个主表: 主子表:指的是一个表单模板包含一个主表.一个明细表: 多子表:指的是一个表单模板包含一个主表.多个明细表: 嵌套多子表:指的是一个表单模板嵌套了多个主子表或者多个多子表: 表单设

基于jquery的web在线流程图设计器gooFlow

1.Gooflow特点 1.1 跨浏览器 可兼容IE7--IE10, FireFox, Chrome, Opera等几大内核的浏览器,且不需要浏览器再加装任何控件. 1.2 多系统兼容性.可移植性 由于只包括前台UI,因此二次开发者可很方便将本插件用在任何一种需要流程图的B/S系统应用上,流程图的详细实现逻辑完全交于后台程序开发者自己实现;对于后台,只要能返回/接收能被本插件解析的JSON格式数据即可.所以本插件可用于不同的服务器语言建立的后台上. 1.3 跨领域 流程图设计器不止用在电信领域,

基于Extjs的web表单设计器 第七节——取数公式设计之取数公式的使用

基于Extjs的web表单设计器 基于Extjs的web表单设计器 第一节 基于Extjs的web表单设计器 第二节——表单控件设计 基于Extjs的web表单设计器 第三节——控件拖放 基于Extjs的web表单设计器 第四节——控件拖放 基于Extjs的web表单设计器 第五节——数据库设计 基于Extjs的web表单设计器 第六节——界面框架设计 基于Extjs的web表单设计器 第七节——取数公式设计之取数公式定义 基于Extjs的web表单设计器 第七节——取数公式设计之取数公式的使用

基于Extjs的web表单设计器 第五节——数据库设计

这里列出表单设计器系列的内容,6.7.8节的内容应该在春节后才有时间出了.因为这周末就请假回老家了,准备我的结婚大事.在此提前祝大家春节快乐! 基于Extjs的web表单设计器 基于Extjs的web表单设计器 第一节 基于Extjs的web表单设计器 第二节——表单控件设计 基于Extjs的web表单设计器 第三节——控件拖放 基于Extjs的web表单设计器 第四节——控件拖放 基于Extjs的web表单设计器 第五节——数据库设计 基于Extjs的web表单设计器 第六节——界面框架设计

基于Extjs的web表单设计器 第六节——界面框架设计

基于Extjs的web表单设计器 基于Extjs的web表单设计器 第一节 基于Extjs的web表单设计器 第二节——表单控件设计 基于Extjs的web表单设计器 第三节——控件拖放 基于Extjs的web表单设计器 第四节——控件拖放 基于Extjs的web表单设计器 第五节——数据库设计 基于Extjs的web表单设计器 第六节——界面框架设计 基于Extjs的web表单设计器 第七节——取数公式设计 基于Extjs的web表单设计器 第八节——表单引擎设计 这一节我给大家介绍一下表单设

Stimulsoft Reports Designer.Silverlight是一个基于web的报表设计器控件

Stimulsoft Reports Designer.Silverlight是一个基于web的报表设计器控件,通过使用它您可以直接在web浏览器中更改您的报表控件.该产品使用Silverlight技术和ASP.NET开发.它不需要开发人员编写复杂的代码或很长的组件设置.您在服务器上使用的是一个简单的ASP.NET组件.Silverlight组件在客户端上运行.Stimulsoft Reports Designer.Silverlight拥有一个时尚的用户界面,加载迅速,运行速度快,并拥有丰富的

基于Extjs的web表单设计器 第三节——控件拖放

看过之前设计器截图的朋友应该有印象,可能会发觉我们的设计器UI设计布局其实类似Visual studio 的设计界面,采用的是左.中.右三个区域布局.左侧为控件区域.中间为表单的画布设区域.右侧为属性区域.这样的UI设计肯定就得支持控件的拖拽设计,用户只要拖放一个控件到我们的画布上,那么画布就应该立即能够看到我们拖放的控件在画布中的位置.大小.以及一些控件自带的默认信息.不用说这样的设计对于用户来说不论在操作体验上还是设计的感官上都更加直接和方便,因为我在设计阶段就可以知道我设计后的表单在系统运

基于Extjs的web表单设计器

由于这样工作和自身的一些原因很长一段时间没有写过博客了.最近想把自己前面一段时间搞出的一个表单设计器的相关经验或者经历记录下来.分享给大家,也算是对自己前2个月的一个总结回顾吧. 首先介绍一下开发此版本的表单设计器的原因及背景.该项目是公司为中国某大型国有企业开发网上经费报销系统,主要是处理改集团及其二级单位,三级单位等子分公司的各种日常经费报销,预算控制及其他常用业务审批(比如:备用金借支.出差申请及差旅费报销.合同管理.资产调拨等).系统主要由两个最重要的部分组成一个WF流程设计及流程引擎—

基于vue开发的一款强大的表单设计器,支持element和antd-vue表单快速开发。

基于 vue 和 element-ui 实现的表单设计器,使用了最新的前端技术栈,内置了 i18n 国际化解决方案,支持生成element 和 antd-vue 表单,让表单开发简单而高效. 在线预览 使用文档 特性 可视化配置页面 提供栅格布局,并采用flex实现对齐 一键预览配置的效果 一键生成配置json数据 一键生成代码,立即可运行 提供自定义组件满足用户自定义需求 提供远端数据接口,方便用户需要异步获取数据加载 提供功能强大的高级组件 支持表单验证 快速获取表单数据 国际化支持 组件