![]() |
1.“客户”和“经销商”均采用了可编辑的下拉(EditableDropTreelist). 2.“客户”是普通的可编辑下拉,具有客户端搜索功能,请在某行“客户”处慢慢输入"London",看看搜索效果; 3.“经销商”的下拉树列表的 dataURL 采用了表达式,使之具备了服务器端搜索功能,每输入一个字都能从服务器获得刷新. 请在“经销商”处慢慢输入 "London", 看看有什么不同 ( 注: 此处反应比较迟钝,是因为我们将最小刷新间隔 RefreshDelay 设成600毫秒,在您自己的应用中,可以将它设得小一点). 4.请在“经销商”处快速输入 "well" 后立即回车,查看单元格数据的变化;快速输入 "we" 后立即回车,却未能获取数据,请您自己分析原因. |
![]() |
1.源码分析:可查看创建该TreeList的XML描述文件; 2.查看被下拉引用的客户; 3.查看被下拉引用的经销商,关注dataURL,它采用了表达式: dataURL="='http://www.supcan.cn/dotnet/customer.aspx?substr='+encodeURIComponent(data)" 备注:encodeURIComponent( ) 函数作用是对汉字和某些字符作UTF-8编码. 4.查看提供“经销商”搜索功能的服务器端的C#源码; 5.注意:服务器端的这个服务,还必须承担对单个Key(不是输入的文字)的搜索服务,请看OnReady( )事件: function OnReady(id) { AF.func("Build", "treelist/orders3.xml"); AF.func("Load", "treelistdata/orders.txt"); //模拟初始加载:经销商(服务器搜索列)的某几行数据 //注意:设置的是data(外键),而不是display text AF.func("SetCellData", "8 \r\n CustomerID2 \r\nWELLI"); //WELLI 是dataCol数据, 而不是displayCol AF.func("SetCellData", "9 \r\n CustomerID2 \r\nHILAA"); //HILAA 是dataCol数据, 而不是displayCol }源码的第8、9行模拟了这种场景,如果Load( )的数据包含了 经销商 的数据,在显示时,硕正控件是逐行向服务器发送http请求,取得key相应的display内容的! 6.性能优化:TextId技术简介 从上述分析可知,采用服务器搜索时,初始数据肯定会导致性能问题: 如果每行都有初始值,那么每一行在初次显示时都会向服务器发起一个请求。为了解决此性能问题,建议使用 textId 技术:增加一个隐藏列,该列保存了初始数据的显示内容,由服务器生成加载数据时同时生成。如下是使用了 textId 的例子: |
请查看该TreeList的XML描述文件, 核心是:... <Col name="CustomerID2" textId="CustomerValue" edittype="editableDroptreelist" droplistID="customer2">经销商</Col> <Col name="CustomerValue" /> ...请查看加载的XML数据, 请关注其中的<CustomId2>、<CustomValue>的内容. 7.服务器搜索的下拉,允许分页显示,例子在后续的“20.分页的下拉”中: |