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

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

編輯:關於C語言

在這個模板中首先接受了一個名為Level的參數,該參數表示生成的樹狀列表的層次序號。

此處定義了一個名為“NodeID”的XSLT變量,將作為樹狀列表節點在Html文檔中的編號。

這裡使用了XSLT函數generate-id,該函數屬於創建一個惟一的編號。對相同的XML節點調用generate-id函數會得到相同的結果,對不同的XML節點調用該函數一定會得到不同的編號。注意,這裡的編號在同一個XML文檔中是惟一的,但對多個XML文檔則不一定了。若對兩個XML 文檔中的XML節點調用該函數是有可能得到相同的編號。因此當同一個頁面上有多個WEB控件,或者WEB控件支持動態加載子節點時,整個頁面會對多個 XML文檔執行XSLT轉換,從而導致多個節點對象可能使用一樣的節點編號的情況。若多個節點的編號一樣會導致樹狀列表工作異常。這就是為什麼在本演示程序中的“TreeVIEwNode.ASPx”中使用“System.Guid.NewGuid”來手動的設置節點編號的原因。因為“NewGuid”函數會創建一個全球惟一編號,多次調用“NewGuid”函數而創建相同的編號的可能性基本上不存在,這從而保證了同一個頁面中所有樹狀列表的節點編號的惟一性。

此處定義了名為“ShowChildNode”的XSLT變量。這裡判斷了Level參數值是否小於1,若小於1則參數值為1,表示初始化時該節點的子節點就顯示出來。在這裡可以控制樹狀列表初始化時顯示多少層節點。

此處定義了“ChildCount”變量,用於存放子節點的個數,以後需要獲得子節點個數時就用這個變量,避免重復計算。

此處定義了“HasChild”變量,用於判斷是否有子節點,以後需要判斷是否有子節點時就不需要重新計算了。

准備工作完畢後開始輸出Html代碼了。首先輸出一個表格行,然後輸出第一個單元格。

若節點存在子節點,若節點不是父節點的最後一個子節點時設置單元格的背景圖片,從而模擬顯示樹狀列表的層次結構線。此外由於節點存在子節點,因此可以展開和收縮,因此還輸出展開和收縮控制點,並對控制點圖片添加“onclick”屬性,該屬性中調用了控件輸出的第三段Html代碼中定義的名為 “SkyTreeVIEwContrlExpendNodeByID”的Javascript函數。

若節點不存在子節點則輸出圖片來模擬樹狀結構葉子節點連接線。

接下來就是輸出第二個單元格了。首先輸出節點前面的圖標,若樹狀節點定義了Icon數據,則設置圖標的SrcBack和src屬性值為Icon數據。若沒有指定Icon數據,則使用默認值。並設置顯示圖標的圖片的“onclick”屬性,這個“onclick”屬性將會調用Javascript函數“SkyTreeVIEwContrlExpendNodeByID”。

然後輸出節點文本,輸出超鏈接和OnClick屬性值,若節點還有XMLSource值,這設置該值到Html元素的XMLSource屬性中。

系統判斷XSLT變量“ChildCount”的值,若該節點存在子節點,則創建一個table元素,然後遍歷所有的子節點,遞歸調用TreeNode模板,並傳遞Level參數,並使得Level參數值每次遞歸調用都增加1。

若節點的XMLSource值有效,還輸出一個隱藏的提示“正在加載”的文本標簽。

經過上述過程,一種高性能的可動態加載子列表的ASP.Net樹狀列表控件開發完畢,接著筆者將這個WEB控件投入使用。

Default.ASPx

演示程序中有一個Default.ASPx頁面,為默認頁面,這個頁面就演示使用樹狀列表WEB控件,讀者可以使用IE浏覽器運行這個頁面,可以看到兩個樹狀列表,都是使用了3層節點來顯示數據庫中的客戶訂單信息。

左邊的列表內容是一下子加載了數據庫中的所有的數據,頁面加載後該樹狀列表已經包含了3072個節點。用戶鼠標操作可以展開和收縮節點,可以點擊貨物節點來彈出一個消息框。

而右邊的列表內容是動態加載的,頁面加載後該列表只加載了客戶信息,並沒有加載定單信息和貨物信息。當用戶鼠標展開節點時,頁面會根據需要自動的從後台加載相關的信息並動態的生成子節點。動態加載子節點能加快樹狀列表的初始化加載速度。

使用VS.Net 2005打開演示程序,重新編譯一下,然後打開演示頁面Default.ASPx 的設計界面。其設計界面如下圖

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