樹節點的資料結構設計(表和treeview)

來源:互聯網
上載者:User
Technorati 標籤: VB,treeview,node,key,tag,text,多掛節點,資料庫,資料結構,階層,樹狀結構,樹節點,表結構

著作權聲明:可以任意轉載,轉載時請務必以超連結形式標明如下文章原始出處和作者資訊及本聲明

作者:xixi

出處:http://blog.csdn.net/slowgrace/archive/2008/12/08/3474159.aspx 

資料結構的設計分兩個方面:一方面是在資料庫裡如何儲存有關樹和樹節點的資訊;一方面是在treeview控制項上如何安排node的key, tag, 和text。

1.節點表和節點細節表

一棵樹下可能同時存在多種不同性質的節點,比如,在資源管理員的樹中,同時存在檔案夾和檔案兩種節點,它們各自對應不同的屬性。如何在資料庫中管理這些位於同一棵樹下但具有不同資料結構的資訊呢?

初步思路是,在節點表中設定strDetailTable和lngDetailId欄位,儲存節點對應的細節資訊所在的表的名字和在其中的ID。即,節點基本資料在節點表(又稱樹表)中,節點細節資訊根據不同的類型存在另外的相應的節點細節表中。這樣要找一個節點的細節資訊,只要到strDetailTable欄位規定的表中找相應記錄就可以了。相應的,刪除節點的時候,要同時刪節點表和節點細節表中的記錄。

注意:節點表與樹是一一對應的,有幾種樹就有幾張節點表;而由於多掛節點的存在,節點細節表和節點表是一對多的關係,就是,同一細節可能在不同節點表裡都存在相應的節點,在同一節點表裡也可能存在不止一條記錄具有同樣的細節。

1.1.節點表的欄位
1.lngNodeId
2.lngFatherId:記錄它的父節點的節點ID
3.strDetailTable:該節點的細節表名
4.lngDetailId:該節點的細節ID
5.sngValue,用來記錄本節點的所有子節點的金額之和;
6.sngPercent,用來記錄本節點的金額占父節點金額的百分比。
7.strNodeComment
為了讓所有節點的總金額有地方存放,於是在表中加一個虛擬根節點,作為lngNodeId為1的節點,其sngValue存的是所有節點的總金額,sngPercent為100%,lngFatherId為0,節點名為該節點表名。有關金額和百分比的資訊,見http://blog.csdn.net/slowgrace/archive/2009/04/16/4084636.aspx。
注意:這裡沒有節點名字欄位,節點名要到相應的細節表去查(這個設計時也先後改了多次)。

1.2.節點細節表的欄位
a)lngId
b)strName
c)strComments
d)bytRef:多掛計數,預設為1
e)sngValue:僅當為基礎節點時,才有該欄位,見http://blog.csdn.net/slowgrace/archive/2009/04/16/4084636.aspx。

 

2.treeview節點屬性資訊的安排

node有3個可用來儲存節點相關資訊的屬性:text、key、tag。

2.1 text

I store the strNodeName in newNode.text since it is text which is displayed before users, so a meaningful Node name is more user-friendly.  另外,樹的根節點的text等於樹表的名稱。另外,對於需要顯示百分比和/或金額的樹,還包含金額標誌位和百分比標誌位,形式為:名字-金額-百分比。如:名字-98-1%。

2.2 key

Key is a more safe way to refer to a node object than index, as index can be dynamically changed.  I store nodeId in newNode. Key since key require a unique string and nodeId is unique for each node==each record. And because node.key can't be given a string contains only number, to get the real nodeId use Node2Id(nodex).

2.3 tag

放的是見游標志位,取值字母Y或N,標識該節點是否見過光,見過光的節點的兒子節點也就產生過了,這是為了防止反覆添加兒子節點引起執行階段錯誤。

另外,想加個限定標誌位,規定它以下的基礎節點的一些欄位的取值。比如在蔬菜底下添的食材的購買地點都在蔬菜、營養成份都是蔬菜等等。暫緩。

更多樹類文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.