NoahWeb
在线搜索
NoahWeb.net | 开发者交流中心 | 支持 | 文档 | 反馈缺陷 

多级关联标签(SelectLevel)示例

那么下面的时间中,我们一起来了解一下眼前这种“多级关联类型”控件。
有些情况下,表单上需要有两个关联的select控件,第二个select的可选项是根据第一个select的选择结果动态生成的。我们将这种关联的select控件称之为“多级关联类型控件”。听起来似乎很难实现,其实不然。在NoahWeb中,实现这样的关联类型控件是比较简单的,我们还是先来看一看代码。如下图

图中是一个完整的二级关联类型控件,前五行代码在上面的示例中已经做过详细介绍,在此不再重复。需要花些时间来说明的是图中这句代码,如下图

图中红圈部分的SelectLevel标签用来描述多个控件的选择级关联,说得简单一点,表示将input id为zone和district的两个select控件进行值关联,并使用变量值[zone]和[district]来分别设置他们默认的被选中值。如下图

接下来的LevelOption标签用来描述该级相关的可选值,它带有两个参数:text和
value。其中text用来描述显示的内容,而value用来描述显示内容的值。配合示例我们不难发现,该标签为select控件提供的显示的默认值,也就是文字“请选择”,该文字内容是没有值的。如下图

我们看到出现了两组LevelOption标签,这是因为示例中使用了两个select控件进行关联,所以这里的两组LevelOption标签呈嵌套出现。那么,显示在前端页面的效果如下图

我们试一试将该标签中的text内容改变。如下图

那么前端页面的显示如下图

请注意,我们将嵌套在里层的那个LevelOption标签的text内容改变了,对应到前端页面是第二个select控件,也就是说,第一级select控件和第二级select控件是嵌套关系的,如果你希望在加一级的话,就应该继续嵌套在第二级select控件之中。LevelOption标签分别支持两种模式,直接输入或数据库来源,同一个LevelOption只能使用其中一种模式,LevelOption可以多层嵌套使用,并可在每个LevelOption标签上任意使用一种模式。我们上面使用的是直接输入模式,现在我们继续看,下面的这两组LevelOption标签使用的就是数据库来源模式。我们一起来看一看代码。如下图

在数据库来源模式的LevelOption标签中,带有6个参数,分别是OptionsSQLLink,OptionsSQLValue,OptionsSQLText,OptionsSQLLinkAutoMode,OptionsSQLLinkAutoReset,OptionsSQLLinkNewRunMode,其中前三个是你在使用时必须指定的,而后三个是拥有系统默认值的,不出现,当你需要对其值改变的时候才显示的指出来。我们一起来看一看这些参数。首先是OptionsSQLValue,该参数用来指定一个数据库操作集,关联该级相关的选项。如下图

也就是说,这个select控件中的可选值是该数据库操作集的查询返回结果。相信这一点你已经明白了。继续,OptionsSQLValue参数用来指定该级的可选择项的值所对应的变量表达式,如下图

示例中,我们使用数据库返回字段id作为该级的可选择项的值所对应的变量表达式。OptionsSQLText参数用来指定该级的可选择项显示内容所对应的变量表达式。如下图



这里我们使用数据库返回字段name作为该级的可选择项显示内容所对应的变量表达式,说得简单一点,也就是该select控件中显示的内容是数据库返回字段name,而值则是你所选的name字段所对应的id字段。其实,这两个参数和我们曾经说过的Values标签的ValuesSQLValue参数以及ValuesSQLLabel参数作用是相似的。
而LevelOption标签的后三个参数是拥有系统默认值的,不要求必须显示。我们一起来看一看。
OptionsSQLLinkAutoMode参数用来指定该级关联的查询是否自动运行。默认为true.
OptionsSQLLinkAutoReset参数用来指定该级关联的查询是否自动重设到第一行。默认为true.
OptionsSQLLinkNewRunMode参数用来指定该级关联的查询是否重新查询。默认为false.

接下来我们看到一个数据库操作集,请注意,这个数据库操作集才是NoahWeb中selectlevel(多级关联)类型控件的最重要部分。我们一起来看一看。如下图

这个数据库操作集需要一个接收一个变量作为查询条件,那么这个变量就成了关键。应该这样解释,传入操作集的这个变量就是上一个数据库操作集的返回值,示例中,我们的第一个数据库操作集是manager.H_Zone_SQL_zone,从上面的介绍中我们知道,该操作集的返回值就是第一个select控件的可选值,那么也就是说,你在第一个select控件中所选择的值将成为下一个select控件可选值的生成条件。如下图

注意看第二个leveloption,它使用了上面的那个数据库操作集,其他参数和第一个leveloption无异。我们已经知道,上面的数据库操作集使用第一个leveloption中的数据库返回字段id作为查询条件,而这里的leveloption又使用该操作集作为数据库来源。这样就实现了多级关联查询的目的,你的第二个select控件的可选值是由第一个select控件所决定的。
我们分析一下流程,首先,你在第一个select控件中选择了一个值,那么,该值所对应的数据库返回字段id就作为下面leveloption标签中的数据库操作集的查询条件,而第二个select控件正是使用了该数据库操作集来生成可选值,从而做到了关联查询。

继续看,我们看到了第二个Input控件,它是select类型的。还记不记得上面有一句代码将这两个select控件关联起来?如下图

是的,这样就将两个select控件有机地关联起来了。如果你的应用需要你关联更多的select控件,那么请按照上面所说的嵌套方式写入代码。注意,关联的数据库操作集所查询的数据表必须是有字段相关联的,因为后一个操作集是需要前一个操作集的返回字段作为条件的,切记。

 

 

 

 

查看NoahWeb在线手册

Copyright © 2001-2004 The NoahWeb Corporation
All rights reserved.