Dorado 5 : 3.分页过滤下拉框DynamicDropDown (T1)

在dorado中,分页过滤下拉框DynamicDropDown又称动态下拉框,它可以看成是DatasetDropDown的增强版。实际上,DynamicDropDown下拉框的下拉项是一个JSP页面。

准备工作

在dropdown的ViewModel中执行【右键datasetEmployee】—>【Modify...】。

图10-28
在【Add the Join Table】窗口中,点击【Add...】。

图10-29
在【Setting the Join Relation】窗口中,选择【Join Table】值为DEPT。

图10-30
在左栏【Fields from Source Table】中选中DEPT_ID,同样在右栏【Fields from Join Table】中也选中DEPT_ID。点击【Add】添加至【Join Relations】中。

图10-31
点击【OK】完成。在【Add the Join Table】窗口中,选中新添加的关联表DEPT。

图10-32
在【Column】的左栏选中DEPT_NAME,点击【 > 】添加至右栏中。

图10-33
点击【Finish】完成关联表的设置。

图10-34
设置datasetEmployee中新增的DEPT_NAME的label值为"部门名称"。

图10-35
由于datasetEmployee中新增了列,其绑定控件也需要相应地新增控件元素与之对应。新增AutoForm中元素。步骤:【formEmployee】—>【Auto create elements】。

图10-36
执行之后,调整新增DEPT_NAME的顺序。

图10-37
同样使用tableEmployee的【Auto create columns】完成新增column的操作,并调整顺序。

图10-38
全部保存之后,刷新JSP页面查看效果。

图10-39
页面中AutoForm和DataTable控件都新增了"部门名称"元素,虽然"部门编号"和"部门名称"的显示值(Label)一致,但它们的数据值(Value)并不一致。

新建数据坞Module

在dorado中DynamicDropdown下拉框中绑定的Dataset必须来自Module(数据坞)中的Dataset。通过DatasetReference方式引入Module中的Dataset数据集对象。
在sample项目的src下新建Module。步骤:【src】—>【New】 —>【Others】。
在【Select a wizard】中,选择【Dorado Studio】—>【Module File】。

图10-40
点击【Next】,在打开的【New View File】窗口中,设置新建Module(数据坞)的名称为ModuleSample。

图10-41
点击【Finish】,完成新建Module(数据坞)。如图10-42。

图10-42

准备所需数据集

在ModuleSample中新建Datasets。步骤:【module】—>【Insert】—>【Datasets】。

图10-43
在Datasets中新建AutoSqlDataset,命名datasetDept,并设置其中Fields的label属性值。

name

dataType

label

dept_id

string

部门编号

branch_id

string

分公司编号

dept_name

string

部门名称

表10-05

图10-44

新建分页过滤下拉框

在dropdown的ViewModel中新建DynamicDropDown。步骤:【Controls】—>【Insert】—>【DropDowns】—>【DynamicDropDown】。

图10-45
在【Set Properties】中设置属性id值为dropdownDeptName。

图10-46
点击【Next】继续设置。

图10-47
点击【Browse...】设置sourceModule属性。

图10-48
在【Select a dataset】中选择datasetDept,点击【OK】完成配置。

图10-49
在【Set Properties】中,勾选()【Auto create fields】,然后点击【Finish】完成配置。

图10-50

绑定下拉框

设置dropdownDeptName绑定DEPT_NAME,即设置datasetEmployee中列DEPT_NAME的dropdown属性值为dropdownDeptName。

图10-51
保存全部修改,刷新JSP页面查看效果。

图10-52
可以看出,DynamicDropDown下拉框外观类似于DatasetDropDown。不同的是下拉框中的列与绑定的Dataset中的Field数量一致。在拖动垂直滚动条时会有记录数提示,并且在下拉框的右下角会显示下拉框绑定的Dataset的总记录数。

visibleFields属性

之前新建DynamicDropDown时,我们在设置绑定Dataset部分选中了【Auto create fields】值为,最终下拉框显示也是显示全部列的风格。现在我们调整下拉框,只显示对应的"部门名称"。
设置dropdownDeptName的visibleFields属性值为DEPT_NAME。

图10-53
保存修改,刷新JSP页面查看效果。

图10-54

readFields和writeFields

使用下拉框DynamicDropDown,修改"部门名称"值为"上海-软件研发部"。

图10-55
选择之后,出现两种奇怪的现象。"部门名称"的显示值变成了该部门的编号,而"部门编号"中的显示值仍然为"北京-软件产品支持部"。我们可以通过Debugger调试窗口查看一下。
同时按下按键【Ctrl+Shift+Alt+F12】,调出Debugger调试窗口。输入调试脚本代码,点击【Execute】执行,首先查看"部门编号"的数据值。

alert(datasetEmployee.getValue("dept_id"));



图10-56
修改脚本代码,再查看"部门名称"的数据值。

alert(datasetEmployee.getValue("dept_name"));



图10-57
很显然,"部门名称"和"部门编号"都出现了错误。"部门名称"中的数据值是该名称对应的编号,而"部门编号"中的数据值和显示值则保持不变。正确的情景应该是,当使用下拉框选择某一个部门时,"部门名称"和"部门编号"的显示值和数据值都应该同时发生变化,以保持数据的一致性,否则数据就毫无意义了。
在绑定了Dataset数据集对象的下拉框中,当选中某一下拉项时,同时也意味着选择了下拉框中Dataset数据集中的该条记录,这个动作称之为"readFields"。然后,如果我们需要该条被选择了的记录中某几列的值,并将这些值用于修改下挂了该下拉框的Dataset数据集中的当前记录,则需要进行"writeFields"操作。
整个过程简单地说,就是"读出"(readFields)下拉框中Dataset的被选中记录,然后"写入"(writeFields)下挂了该下拉框的Dataset中。

原理示意图
设置dropdownDeptName的readFields和writeFields属性值。

图10-58

保存修改,刷新JSP页面,查看效果。

图10-59
使用下拉框修改"部门名称"值为"上海-软件研发部",此时的"部门名称"显示值正确,"部门编号"显示值是"上海-软件研发部"。我们再用Debugger调试"部门编号"的数据值是否也发生了变化。

图10-60
可以看到,配置了"readFields"和"writeFields"之后,保证了数据的一致性和正确性。

分页和过滤

DynamicDropDown可以实现在下拉项中的数据分页加载和数据过滤功能。

  • 数据分页加载

设置下拉框绑定Dataset的pageSize属性值为4。

图10-61
保存修改,刷新JSP页面,查看效果。

图10-62
从图中可以看到,dropdownDeptName中的可见数据为4条,垂直滚动条记录提示为总记录12条。滚动记录至第5条。

图10-63
当记录滚动至第5条时,数据自动加载。同样地,由于pageSize的值为4,会新加载4条记录。如此,继续滚动记录至9条仍然会自动加载下一页,每页加载4条记录。

  • 数据过滤

实现下拉框中数据的过滤功能,类似于实现模糊查询功能。dropdownDeptName绑定Dataset中的数据是引用自ModuleSample中的Dataset。因此首先需要设置ModuleSample中datasetDept的MatchRules。
设置operator属性值为like,同时escapeEnabled属性值为true。

图10-64
在dropdown的ViewModel中设置下拉框dropdownDeptName的filterParameter属性值为DEPT_NAME匹配之前设置的MatchRules。

图10-65
保存全部修改,刷新JSP页面,查看效果。

图10-66
设置了filterParameter属性值之后的下拉框在顶部多出了筛选功能部分。输入值"研发",点击【筛选】(单击回车键Enter也可以触发)。

图10-67
执行筛选之后,所有包含"研发"的记录被检索并加载,实现了DynamicDropDown下拉框的过滤功能。

开发步骤

分页过滤下拉框中的下拉项同样也是由Dataset数据集对象提供。与DatasetDropDown不同,DynamicDropDown中的Dataset必须引用Module(数据坞)中的Dataset。同时,DynamicDropDown也提供了比较方便的下拉项过滤筛选功能,数据分页加载的方式提高了数据加载的性能。

开发步骤

 


第一步:准备工作,设置Join Table。


第二步:新建Module。


第三步:在已建的Module中新建Dataset。


第四步:在ViewModel中新建DynamicDropDown下拉框控件。


第五步:设置DynamicDropDown绑定Module中的Dataset。

 


第六步:使用Field绑定DynamicDropDown。

 


详细步骤图

 

Attachments:

worddav58b9a0aeb93c990748ef1e8fdd822e67.png (image/png)
worddavd64b4d883cbbe783d3823486af98f75b.png (image/png)
worddav5e78e9b3487a3e845740142f620a6b67.png (image/png)
worddav4495df2f37873507aa3f47dcae36f1ed.png (image/png)
worddav6a0b84c1e6de92c15b888ead66066e57.png (image/png)
worddav61d88978aa84ebd441dc6a2c45a5d0b7.png (image/png)
worddav4019acdccb99e144033ef8ab61ad799c.png (image/png)
worddav1c50123c51d5319026ff570710b1f5b3.png (image/png)
worddave22463cbe63e21b242b070f964b26e42.png (image/png)
worddava6dbf4b9205379b3ab6b7055f1d7bd51.png (image/png)
worddav93371e3351762b72442ba74379ce9352.png (image/png)
worddav67c2ae9d9f9ddf85f2f244fbe4e0f2f7.png (image/png)
worddav1523f6a9103e02c3740f78f8f84476ff.png (image/png)
worddav736f46f1124008133fef44caea5983c2.png (image/png)
worddav311d60e3defacb21605aa1c90dd50cc9.png (image/png)
worddav43e02785c5f5e7c50edf68d5c4e22d57.png (image/png)
worddavf4851289104a7a8659b5dec91a66e604.png (image/png)
worddav080d3a0d81916b61085396ef4095ae1e.png (image/png)
worddavb59f79db9664357d797ff93a2f762fe3.png (image/png)
worddav786aa087e55764f63a0b8a0109cdf16a.png (image/png)
worddavc23caba310ba76ab07fca99cfbcf4ec4.png (image/png)
worddavaea166e3ff71576851ff6b3dd45fb56b.png (image/png)
worddavc7c3bbe2393e37598745603d51ff69f2.png (image/png)
worddav14d8ea5f16d6b2a438a8f05e991694a4.png (image/png)
worddaveadb77cc97a032f8dd091b35d539b523.png (image/png)
worddav5beab04577d826d1b542397b8c1c2f95.png (image/png)
worddav85589a297fec721d8d922d1e6ecb3500.png (image/png)
worddav9aca020f669c8a27d984d1987c1e1a1c.png (image/png)
worddav3c1cc4ebc9b4be0ae0b31c0de62902f5.png (image/png)
worddavd3e83f0dc3569e2b9087d77d67f64e6f.png (image/png)
worddave6de84052ed562c9a8f1afa5705adabd.png (image/png)
worddav61cf00d22833dcd1db843b13501f1103.png (image/png)
worddav44fccb810287b61dbadf766c3ca0e821.png (image/png)
worddav4a0f89e9793d2503b88a374574934c42.png (image/png)
worddav427383cca4229df0fd3b99d440e986a9.png (image/png)
worddav9c3eed47313cd7523ada0eec0826554f.png (image/png)
worddav8d5e9acb2a1077d7f958aec3ac9c492b.png (image/png)
worddave6ebdbefcaebeed8cfc01f912cab50a4.png (image/png)
worddavaa80ff0db5c7843c67fd21f5f9d96916.png (image/png)
worddav6445906aec2e12600a174d189ecc25d5.png (image/png)
worddavebda405f9d4fbe00304977cb9a03c5ee.png (image/png)
worddav39e526e1cf5ebe176551c7c61a1ea434.png (image/png)
worddav2640447b1d2fb9013f34d946d2ed0261.png (image/png)
worddavbfa1acff6c59a5aa4a8cc95254659aca.png (image/png)
worddavfde5dc087f283daacb8ef5cacd7eff83.png (image/png)
worddav89e9c15410738dbcfac3e603363ab3cf.png (image/png)
worddav1b8dddd60a6f8fa74428f40576e53a77.png (image/png)
worddava45681e5c39cf07bd719c2135491a4b1.png (image/png)
worddav3fb1287f00080aa965f385d3f254a510.png (image/png)