|  | 在新增/更新中使用来自数据库的下拉菜单

DTable在记录新增、更新中定义了很多字段类型来实现不同的表现形式方便用户。通过一个下拉菜单进行数据选择是常用的一种方式。要实现某字段用下拉菜单表现，可以有两种方法：一种是直接定义一些静态数据的集合来实现下拉菜单；一种是通过一个表查询，并将结果作为下拉菜单的源来实现。这里主要详细介绍第二种方式的实现。

Edit_FieldFormat属性用于定义字段的类型。不同的类型可以定义不同的参数选项来实现不同的功能。该属性是一个String类型属性，在新增和更新界面的所有特殊类型字段都通过该属性进行定义。

使用表查询生成下拉菜单属于该属性中的dbselectvalue类型，需要提供一个查询。如：
DTable1.Edit_FieldFormat="5||dbselectvalue|select id,姓名 from 雇员 order by id desc|||||";

上述属性定义了第5列使用表生成下拉菜单，该菜单的标签为<select><option value=optionvalue>显示的文本</option></select>

其中，option的value optionvalue来源于表查询的第0列（id），显示的文本来源于列1（姓名） 。如果将要存储的不是id而仅仅是文本，则该属性应该如此定义：
DTable1.Edit_FieldFormat="5||dbselectvalue|select 姓名,姓名 from 雇员 order by id desc|||||";

如果表查询返回的记录很多，要找到一个特定的记录将是一件令人头痛的事情，为此DTable还允许为该类型设置的指定一个数据筛选的参数。要使用数据筛选功能，可以如此定义：
DTable1.Edit_FieldFormat="5||dbselectvalue|select 姓名,姓名 from 雇员 order by id desc|select id,姓名 from 雇员 where 姓名 like '%@@%' order by id||||";

增加了一个查询语句用于生成筛选功能，此时界面将自动生成一个查询按钮，点击该查询按钮将要求输入一个关键字来筛选记录。在定义该查询语句时，select的字段应该和前一个参数使用的select语句的字段一致。

如果某些用户在记录更新时不允许更改该下拉菜单现有的值，可以通过一个属性来定义该类型字段在更新时为只读。

DTable1.Edit_FieldFormat="5||dbselectvalue|select 姓名,姓名 from 雇员 order by id desc|select id,姓名 from 雇员 where 姓名 like '%@@%' order by id|readonly|||";

如果设置为隐藏：

DTable1.Edit_FieldFormat="5||dbselectvalue|select 姓名,姓名 from 雇员 order by id desc|select id,姓名 from 雇员 where 姓名 like '%@@%' order by id|hidden|||";

下面这段代码演示如果根据权限来定义不同情况下该类型字段是只读

string strtmp1=Page.Session["tmp1"]; //定义权限变量来自登录时就已经赋值的session变量tmp1
if(strtmp1.IndexOf(",超级管理员,")>-1) //如果权限字符串中包含超级管理员这个权限， 就不设置只读
{
DTable1.Edit_FieldFormat="5||dbselectvalue|select 姓名,姓名 from 雇员 order by id desc|select id,姓名 from 雇员 where 姓名 like '%@@%' order by id||||";
}
else //如果不是超级管理员就设置只读。设置了只读也就无须生成数据筛选语句了
{
DTable1.Edit_FieldFormat="5||dbselectvalue|select 姓名,姓名 from 雇员 order by id desc||readonly|||";
}

列序 | 列样式 | 类型 | 参数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 | 最小数(暂未实现) | 最大数(暂未实现) |  |  |

相关示例文件：http://www.dtable.com/ae004.aspx