C#发现之旅 - 高性能ASP.NET树状列表控件(中)
2010-09-30 21:03:16 来源:WEB开发网这个JavaScript函数有两个参数,第一个参数是节点编号,第二个参数是是否设置该节点为当前节点,也就是是否设置高亮度显示(一般的就是蓝底白字)。
在这个JavaScript函数里面,首先根据节点编号获得节点的图标,文本和包含子节点列表的表格对象。并根据需要设置当前高亮度显示的节点对象。
若子节点列表存在则需要展开和收缩子节点列表,此时将节点图标的src属性和它们的扩展属性SrcBack值进行互换,从而切换了图标,还对包含子节点列表的表格对象在可见状态和不可见状态间进行切换。
若子节点列表不存在而且节点的XMLSource属性有效则开始动态加载子节点。首先获得名为 “SkyTreeViewControlTempXML”的XML数据岛对象,本控件输出的第一段HTML代码中已经包含了该XML数据岛。设置 JavaScript全局变量“SkyTreeViewControlDyanmicRootNodeID”的值为当前节点的编号,然后设置这个XML数据岛的src属性值为节点的XMLSource属性值。之后IE浏览器就异步的加载XML文档,转而执行第一段HTML代码块中的JavaScript脚本了。
上面的代码都是使用RegisterStartupScript函数输出了三段HTML代码块。接下来就是输出控件的HTML代码内容了。
输出控件HTML代码
C#代码首先在内存中创建一个XML文档书写器,创建一个System.Xml.Serialization.XmlSerializer类型的对象,使用XML序列化技术将控件Nodes属性中的树状节点保存到一个XML文档中,实现这个功能的代码为
// 在内存中创建一个XML文档书写器
System.IO.StringWriter myStrWriter = new System.IO.StringWriter();
System.Xml.XmlTextWriter myXMLWriter = new System.Xml.XmlTextWriter( myStrWriter );
if( this.IndentXML && this.GenerateAtServer == false )
{
myXMLWriter.Indentation = 3 ;
myXMLWriter.IndentChar = ' ';
myXMLWriter.Formatting = System.Xml.Formatting.Indented ;
}
// 使用XML序列化将控件的树状节点全部保存到一个XML文档中并输出到XML文档书写器中
System.Xml.Serialization.XmlSerializer xser =
new System.Xml.Serialization.XmlSerializer( typeof( SkyTreeNodeList ));
xser.Serialize( myXMLWriter , this.Nodes );
myXMLWriter.Close();
// 获得定义控件树状节点的XML字符串
string xml = myStrWriter.ToString();
更多精彩
赞助商链接