程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅-高性能ASP.NET樹狀列表控件(中)(5)

C#發現之旅-高性能ASP.NET樹狀列表控件(中)(5)

編輯:關於C語言

這個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();

若控件的“GenerateAtServer”屬性值為true,也就是在服務器端生成Html代碼,實現該功能的代碼為

// 若在服務器端生成Html代碼則使用服務器端的XSLT轉換

// 這裡從資源文件SkyTreeVIEwControl.xslt中獲得XSLT代碼
string xslt = ReadXSLTString();
System.Xml.XmlDocument xsltDocument = new System.Xml.XMLDocument();
xsltDocument.LoadXML( xslt );

// 獲得樹狀節點的數據XML文檔
System.Xml.XmlDocument NodeXmlDocument = new System.Xml.XMLDocument();
NodeXmlDocument.LoadXml( XML );
// 創建一個字符串書寫器,XSLT轉換結果將輸出到這個字符串書寫器中
myStrWriter = new System.IO.StringWriter();
// 創建XSLT轉換引擎
System.XML.Xsl.XslCompiledTransform transform = 
    new System.XML.Xsl.XslCompiledTransform();
// 引擎加載XSLT模板
transform.Load(xsltDocument);
// 執行XSLT轉換
transform.Transform( NodeXMLDocument  , null , myStrWriter );
// 直接向ASPX頁面輸出轉換結果
writer.Write( myStrWriter.ToString());

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved