C#发现之旅 - 高性能ASP.NET树状列表控件(下)
2010-09-30 21:03:02 来源:WEB开发网这段代码过程也不复杂,首先获得名为KeyType和KeyValue的页面参数。然后在页面输出流上创建一个XML文档书写器,然后连接数据库准备查询数据。
若参数KeyType的值等于“customerid”,则表示KeyValue为一个客户编号,此时页面是要求输出输出该编号客户名下的所有的订单信息,此时代码连接数据库查询查询Orders数据表,对每一个查询记录输出一个名为Node的XML元素,使用Guid.NewGuid()创建一个不重复的节点编号,输出节点图标,文本信息。此外还输出XMLSource信息。这里的XMLSource信息表示订单节点的子节点信息来源,也就是指定订单的货品信息XML文档地址,这里还是指向页面TreeViewNodeXml.aspx,使用的KeyType参数值为orderdetails,而 KeyValue 参数值就是订单编号。
若页面参数KeyType的值等于orderdetails,则KeyValue为一个订单编号,此时页面被要求输指定编号的订单中的详细货物清单,此时程序执行一个简单的联合查询,获得指定订单编号的所有货品信息,然后输出XML文档。由于货品信息没有子节点,因此也就不输出XMLSource 元素了。
其他文件
这个树状列表控件还包含了一些其他文件,比如SkyTreeViewControl.bmp是控件在VS.NET窗体设计器工具箱上显示的小图标。而其他的以 SkyTreeViewControl_开头的图片文件用于模拟显示树状列表的层次结构,还有一些默认图标文件。
其他说明
读者可以试着运行演示页面Default.aspx,可以发现对树状控件进行不同的设置,生成的HTML页面大小是不相同的。比如笔者设置左边的列表的GenerateAtServer属性为false,IndentXML为false时,也就是启动客户端生成HTML代码,则生成的客户端加载的 HTML页面大小为三百多K,查看其HTML源代码,发现树状列表的节点XML文档占据着HTML文档的大部分。若笔者设置左边的列表的 GenerateAtServer属性为true,也就是在服务器端生成HTML代码,则客户端显示的HTML页面大小接近2兆。体积瞬间增长到6倍,也就是说当树状列表节点比较多时(这里有三千多个),则在服务器端生成代码和在客户端生成代码这两种模式存在很大的差别。这是因为当在客户端生成代码时,服务器端向客户端发送的是XML文档,只包含比较纯粹的数据,体积小;而在服务器端生成代码时,服务器端发送的是HTML代码,除了包含数据外,还有大量的用于控制界面样式的HTML代码,这导致HTML代码量大。
在以前的XML/XSLT章节中,笔者提过,在WEB开发中采用XML/XSLT技术能比较大的改善WEB程序的网络传输性能,在这里用于显示大量节点的树状列表的应用就是一个范例。
部署控件
这个树状列表控件开发完毕后包含在一个DLL文件中,编译程序前要注意设置文件“SkyTreeViewControl.bmp”和“SkyTreeViewControl.xslt”的“生成操作”属性值为“嵌入的资源”。
开发人员在开发其他系统时可以添加这个DLL的引用,在VS.NET的窗体设计器的工具箱上可以看到这个树状列表的图标,若没有则在工具箱上右击显示快捷菜单,选中“添加/移除项目”,在对话框中选择浏览,显示包含控件的DLL 文件,然后选择SkyTreeViewControl即可。
开发人员从工具箱中拖拽一个树状列表控件到ASP.NET页面上就可以开始使用了。
在开发和部署包含树状列表的WEB 程序前,需要将所有“SkyTreeViewControl_”前缀的图片文件拷贝到程序第一级目录下。
小结
在本章中,大家一起研究了目前一些ASP.NET项目中使用的树状列表的原理和出现的问题,并开发新的树状列表控件。这种WEB树状列表控件支持在客户端和服务器端使用XSLT技术生成HTML代码,并能在客户端动态加载子列表,相对于旧控件,新控件加载速度快,能显示大量的节点。
此外读者还学习了IE浏览器所特有的XML数据岛的功能,并使用JavaScript脚本在客户端执行XSLT转换。这里读者可以看到XSLT技术作为国际标准技术已经得到广泛的支持。
更多精彩
赞助商链接