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

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

編輯:關於C語言

第一段Html代碼塊

若控件的“DynamicLoadChildNodes”屬性值為true,也就是控件運行在客戶端動態加載子節點,則輸出支持客戶端動態加載子節點的Html代碼,首先輸出一個名為“SkyTreeVIEwControlTempXML”的XML數據島標簽,並將它的 “onreadystatechange“事件綁定到”SkyTreeVIEwControlDynamicLoadChildNodes”的 Javascript函數上。這裡還定義了一個名稱為“SkyTreeVIEwControlDyanmicRootNodeID”的全局變量,用於指明是哪個節點正在加載在節點。這裡輸出的Html代碼內容為

<!-- 

    定義一個XML數據島標簽
    
    當動態加載子節點時使用該XML數據島來加載定義子節點的XML文檔,

    XML數據島是IE特有技術,其他浏覽器可能不支持。

-->
<xml id='SkyTreeVIEwControlTempXML'
     onreadystatechange='SkyTreeVIEwControlDynamicLoadChildNodes()' ></XML>
<script language=Javascript>

//--------- 開始定義動態加載子節點使用的Javascript 代碼---------------------

// 當前動態加載子節點的根節點對象編號
var SkyTreeVIEwControlDyanmicRootNodeID ;

// 動態加載子節點
function SkyTreeVIEwControlDynamicLoadChildNodes()
{
    // 獲得加載子節點定義數據的XML數據島對象
    var xml = document.getElementById( 'SkyTreeVIEwControlTempXML' );
    if( XML == null )
    {
        return ;
    }
    if( XML.readyState != 'complete' )
    {    // 此時說明XML數據島正處於工作狀態,取消當前操作
        return ;
    }
    // 獲得當前正在處理的樹狀列表節點對象
    var RootNode = document.getElementById( SkyTreeVIEwControlDyanmicRootNodeID + '_text' );
    if( RootNode == null)
        return ;
    var Html = '';
    var errorflag = false;

    // 獲得包含XSLT代碼的XML數據島對象
    var xsl = document.getElementById( 'SkyTreeVIEwControlXSLT');
    if( xsl == null )
    {
        // 未找到XSLT文檔則設置錯誤信息
        Html = '缺失XSLT數據';
        errorflag = true ;
    }
    else if( xml.XMLDocument.parseError.errorCode != 0)
    {
        // 若加載定義子節點的XML文檔錯誤則設置錯誤信息
        Html = '錯誤:' + xml.XMLDocument.parseError.reason
                + '[' + xml.XMLDocument.parseError.url + ']' ;
        errorflag = true ;
    }
    else
    {
        if( xml.XMLDocument.documentElement == null )
        {
            Html = '未找到根節點';
            errorflag = true ;
        }
        else
        {
            // 將當前節點的Html標簽的編號保存到XML文檔中。
            xml.XMLDocument.documentElement.setAttribute(
                'RootID' , 
                SkyTreeVIEwControlDyanmicRootNodeID );

            // 執行XSLT轉換,生成用於顯示子列表的Html字符串
            Html = xml.XMLDocument.transformNode( xsl.XMLDocument );
        }
    }
    // 將當前節點的“正在加載”的字樣刪掉
    var lbl = document.getElementById( SkyTreeVIEwControlDyanmicRootNodeID +'_Loading');
    if( lbl != null )
    {
        if( errorflag )
        {
            lbl.innerHTML = '<br />' + Html ;
            return ;
        }
        // 將動態生成的HTML代碼輸出到Html頁面中
        lbl.insertAdjacentHTML('afterEnd', Html );
        lbl.parentNode.removeChild( lbl );
    }
    else
    {
        // 將動態生成的HTML代碼輸出到Html頁面中
        RootNode.insertAdjacentHTML('afterEnd', Html );
    }

    // 獲得節點的展開點圖片對象
    var myExpend    = document.getElementById( SkyTreeVIEwControlDyanmicRootNodeID + '_expend');
    // 獲得節點的圖標圖片對象
    var myIcon        = document.getElementById( SkyTreeVIEwControlDyanmicRootNodeID + '_icon');
    // 獲得節點的文本對象
    var myText        = document.getElementById( SkyTreeVIEwControlDyanmicRootNodeID + '_text');
    // 獲得子節點表格    
    var myTable        = document.getElementById( SkyTreeVIEwControlDyanmicRootNodeID + '_table');

    if( myExpend != null 
        && myIcon != null
        && myText != null 
        && myTable != null )
    {
        // 將當前節點的控制圖標從收縮狀態改變為展開狀態
        var SrcBack = myIcon.src ;
        myIcon.src = myIcon.getAttribute('SrcBack');
        myIcon.setAttribute( 'SrcBack' , SrcBack );
        
        SrcBack = myExpend.src ;
        myExpend.src = myExpend.getAttribute('SrcBack');
        myExpend.setAttribute( 'SrcBack' , SrcBack );

        //myTable.scrollIntoVIEw( false );
    }

    SkyTreeVIEwControlDyanmicRootNodeID = null;

}//function SkyTreeVIEwControlDynamicLoadChildNodes()

//-------- 本段Javascript 定義結束--------------------------

< /script>

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