|  | 新增、更新时的字段类型设置综述

在新增、更新时最重要的属性就是Edit_FieldFormat了，它实现了大多数类型的输入控件的呈现，并自动生成相关的客户端代码，基本满足在数据录入、更新时所需要的功能。这种方式定义的属性固然有好的一面（可以无限的扩展其类型和参数而无须更改属性的名称），但是属性的可读性比较差，各种类型的参数的表现位置也不定，用户难免会感到一些不适应。

下面这段属性定义了数个字段的类型：

DTable1.Edit_FieldFormat="1||userid|姓名|2|12||^2||password|md5|6|15||^3||htmledit|htmlimg/||||^5||boolean|是|否|||^7||email|||||^8||selectvalue|@@1000.0000@@1500.0000@@3000.0000@@5000.0000@@8000.0000||||^10||urlfile|default_fd|true|default_fd/mini/|上传|^11||defaultvalue|" + Page.Request.UserHostAddress + "|true|||^12||defaultvalue|0|true|||^13||dbselectvalue|select id,姓名 from 个人资料 order by id desc|select id,姓名 from 个人资料 where 姓名 like '%@@%' order by id desc|||^14||checkboxlist|select 技术,技术,类别 from 技术 order by 类别||||";

这样的属性很难让人理解，也根本无法写注释，如果换一种方式表现就能有所改观：
DTable1.Edit_FieldFormat="1||userid|姓名|2|12||"; //定义1列为用户名类型
DTable1.Edit_FieldFormat+="^2||password|md5|6|15||"; //定义2列为密码类型
DTable1.Edit_FieldFormat+="^3||htmledit|htmlimg/||||"; //定义3列使用超文本编辑器
DTable1.Edit_FieldFormat+="^5||boolean|是|否|||"; //定义5列使用布尔类型替换
DTable1.Edit_FieldFormat+="^7||email|||||"; //定义6列为email类型（将自动生成客户端验证）
DTable1.Edit_FieldFormat+="^8||selectvalue|@@1000.0000@@1500.0000@@3000.0000@@5000.0000@@8000.0000||||"; //定义8列为简单的下拉菜单
DTable1.Edit_FieldFormat+="^10||urlfile|default_fd|true|default_fd/mini/|上传|"; //定义10列为文件上传类型，并可以生成缩略图
DTable1.Edit_FieldFormat+="^11||defaultvalue|" + Page.Request.UserHostAddress + "|true|||"; //定义11列带有默认值，值为用户的ip地址
DTable1.Edit_FieldFormat+="^12||defaultvalue|0|true|||"; //定义12列也带有默认值，并且为只读
DTable1.Edit_FieldFormat+="^13||dbselectvalue|select id,姓名 from 个人资料 order by id desc|select id,姓名 from 个人资料 where 姓名 like '%@@%' order by id desc|||"; //定义13列为通过表查询生成的下拉菜单，同时还定义了数据筛选
DTable1.Edit_FieldFormat+="^14||checkboxlist|select 技术,技术,类别 from 技术 order by 类别||||"; //定义14列通过表查询记录生成复选框集，存入的是文本

有关该属性设置的一些其它应用技巧：

- 为控件生成TIP(鼠标悬停的提示)：通过控件的样式来实现，
  例如DTable1.Edit_FieldFormat+="^5||boolean|是|否||title='鼠标悬停的提示文本'|"; //定义5列使用布尔类型替换
  这里利用了控件的样式设置功能。如果同时要设置样式和鼠标悬停提示文本呢？
  DTable1.Edit_FieldFormat+="^5||boolean|是|否||class='inputsty' title='鼠标悬停的提示文本'|"; //定义5列使用布尔类型替换
- 如果不需要设置的选项和参数，只需为每一个类型补足7个“|”即可

列序 | 列样式 | 类型 | 选项1 | 选项2 | 选项3 | 描述 | 控件样式
|  | defaultvalue | 默认的值 | 是否只读 |  |  |
设置新增时字段的默认值，参数2的可选项为{true,false}
|  | ReadOnly |  |  |  |  |
在更新时设置另一个字段为只读
|  | checkboxlist | checkkbox数据源的sql语句 |  |  |  |
本类型是将一个数据表查询的记录的结果用复选框的形式表现在AE的界面。如：select id,爱好 from table.如果第一个字段是id,那么记录到数据库的值将是id的数组形式；如果第一个字段是爱好[nvarchar]，那么记录到数据库的值将是文本。
|  | boolean | true值 | false值 |  |  |
|  | autovalue | 赋值 |  |  |  |
|  | forceexist |  |  |  |  |
强制必填字段
|  | selectvalue | 值1@@值2@@值3 |  | 只读和隐藏（更新时有效）{hidden,readonly} |  |
在AE时，为某个字段设置一个下拉菜单，下拉菜单的数据来自一个简单的设置，之间的项用@@间隔
|  | dbselectvalue | 下拉菜单来源的数据查询 | 将要进行搜索的语句，如： select id,名称 from table where 名称 like '%@@%' order by id desc | 只读和隐藏（更新时有效）{hidden,readonly} |  |
在AE时，为某个字段设置一个下拉菜单，下拉菜单的数据来自一个数据查询返回的结果，如：select id,爱好 from table.如果第一个字段是id,那么记录到数据库的值将是id的数组形式；如果第一个字段是爱好[nvarchar]，那么记录到数据库的值将是文本。
|  | urlfile | 上传文件保存的路径 |  | 缩略图保存的路径 |  |
设置本字段为上传文件的字段。如果设置了缩略图保存的路径，Dtable将为上传的图片生成缩略图。缩略图的大小默认为100*100并保持比例。
|  | relatingmenu | 父查询@@子查询 |  |  |  |
设置一个关联菜单，您可以选择大项，然后会列出该大项下的所有子项供您在AE时选择。如:select 球队名称 from 球队@@select 球员,所属球队 from 球员名单。在添加/更新时，将显示两个列表菜单。选择第一个列表菜单（大类），则第二个列表菜单则显示大类下所有的子类列表。如例子所示，选择球队菜单时，将列出该球队所有的球员名单。本属性暂时不适于用ID来关联的表，只能用于文本关联。
|  | treemenu | 表名@@id列名@显示的字段名@@父字段名 | 一级分类的样式@@二级分类的样式@@三级分类的样式@@N级分类的样式 |  |  |
|  | userid | 用户名字段的真实列名 | 最小字数 | 最多字数 |  |
设置为userid类型字段后，添加记录时将要检测数据表中是否存在该记录。当然，这个类型也可以用于其它场合，例如：不允许有重复记录的字段就可以设置为userid类型。最小字数和最多字数是为了生成客户端验证而设置的，默认最小字数为5，最多字数为20
|  | unique | 唯一性字段的真实列名 | 类型{datetime,string,number,boolean} | 是否显示唯一性检验按钮{true,false} |  |
设置唯一性字段. 字段的真实列名何字段的类型必须指定(所有的数字类型都用number表示).
|  | password | md5 | 最小字数 | 最多字数 |  |
设置密码字段后，dtable将自动生成密码确认输入控件以及客户端、服务器端验证。如果参数4（选项1）为空，则记录到数据库的时候不对录入的内容加密，否则就进行您所指定的加密方式（注意：使用md5加密，字段需要32字节长度）。
|  | htmledit | 上传图片将要保存的相对路径 |  |  |  |
设置本字段提供html编辑器，请一定要设置“上传图片将要保存的路径”，这个路径将用于保存编辑器上传的本地图片。
|  | html |  |  |  |  |
指定了本类型，则dtable在记录到数据库的时候不对数据进行html编码
|  | email |  |  |  |  |
本类型表明字段将录入的是一个email地址，dtable将自动生成客户端验证程序。
|  | datetime | 最小时间(暂未实现) | 最大时间(暂未实现) |  |  |
|  | int | 最小数(暂未实现) | 最大数(暂未实现) |  |  |
|  | decimal | 最小数(暂未实现) | 最大数(暂未实现) |  |  |