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

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

編輯:關於C語言

本類型比較簡單,定義了一些樹狀節點擁有的屬性,此外還定義了一個Nodes子節點列表,一個節點可以有若干個子節點,則多個節點組合起來就可以構成樹狀列表。

該類型前面使用代碼“[System.Serializable()]”來指定類型可以進行二進制序列化,在ASP.Net2.0中,所有可以保存在頁面Session或ViewState中的對象必須可以執行二進制序列化,若SkyTreeNode類型沒有使用代碼 “[System.Serializable()]”標記為可執行二進制序列化,則不能將其保存在頁面Session或VIEwState中。類型 SkyTreeNode前面還使用代碼“[System.Xml.Serialization.XmlType("Node")]”來指定類型進行XML 序列化時的使用的XML標簽名為“Node”。

對“Parent”屬性在使用代碼“[System.Xml.Serialization.XmlIgnore()]”表明該屬性不執行XML序列化和反序列化。由於XML序列化是遞歸處理對象的所有的可讀寫屬性,而“Parent”屬性指向該節點的父節點,而父節點的“Nodes”屬性又包含了這個節點,如此形成了對象循環引用,若“Parent”屬性參與XML序列化則必然會造成無限遞歸循環,導致程序錯誤。

SkyTreeNodeList.cs

該文件定義了SkyTreeNodeList類型,該類型是樹狀節點列表,能存儲若干個樹狀節點對象,該類型的代碼為

/// <summary>
/// 樹狀列表節點列表
/// </summary>
[System.Serializable()]
public class SkyTreeNodeList : System.Collections.CollectionBase
{
    /// <summary>
    /// 初始化對象
    /// </summary>
    public SkyTreeNodeList()
    {
    }
    /// <summary>
    /// 初始化對象
    /// </summary>
    /// <param name="node">列表所屬節點對象</param>
    public SkyTreeNodeList(SkyTreeNode node)
    {
        myOwnerNode = node;
    }

    private SkyTreeNode myOwnerNode = null;
    /// <summary>
    /// 擁有該列表的節點對象
    /// </summary>
    [System.ComponentModel.Browsable(false)]
    public SkyTreeNode OwnerNode
    {
        get
        {
            return myOwnerNode; 
        }
    }
    
    /// <summary>
    /// 返回指定序號處的節點對象
    /// </summary>
    public SkyTreeNode this[int index]
    {
        get
        {
            return (SkyTreeNode)this.List[index]; 
        }
    }

    /// <summary>
    /// 向列表添加節點
    /// </summary>
    /// <param name="node">節點對象</param>
    /// <returns>新節點在列表中的序號</returns>
    public int Add(SkyTreeNode node)
    {
        if (node == null)
            throw new ArgumentNullException("node");
        if (myOwnerNode != null)
            node.Parent = myOwnerNode;
        return this.List.Add(node);
    }

    /// <summary>
    /// 向列表添加若干個節點
    /// </summary>
    /// <param name="nodes">節點列表,該列表中的元素類型必須為SkyTreeNode類型</param>
    public void AddRange(System.Collections.ICollection nodes)
    {
        if (nodes == null)
            throw new ArgumentNullException("nodes");
        foreach (SkyTreeNode node in nodes)
        {
            if (myOwnerNode != null)
                node.Parent = myOwnerNode;
            this.List.Add(node);
        }
    }

    /// <summary>
    /// 刪除節點
    /// </summary>
    /// <param name="node">節點對象</param>
    public void Remove(SkyTreeNode node)
    {
        this.List.Remove(node);
    }

    /// <summary>
    /// 判斷節點在列表中的序號
    /// </summary>
    /// <param name="node">節點對象</param>
    /// <returns>節點在列表中的從0開始的序號,若不存在則返回-1</returns>
    public int IndexOf(SkyTreeNode node)
    {
        return this.List.IndexOf(node);
    }

    /// <summary>
    /// 判斷列表是否存在指定的節點對象
    /// </summary>
    /// <param name="node">節點對象</param>
    /// <returns>是否存在該節點</returns>
    public bool Contains(SkyTreeNode node)
    {
        return this.List.Contains(node);
    }
}//public class SkyTreeNodeList : System.Collections.CollectionBase

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