WinFrom中TreeView中的應用

2021-06-18 09:26:23 字數 2006 閱讀 6524

c#中的樹很多。比如,

windows form

程式設計和

web程式設計中都有一種被稱為

treeview

的控制項。

treeview

控制項是乙個顯示樹形結構的控制項,此樹形結構與

windows

資源管理器中的樹形結構非常類似。不同的是,

treeview

可以由任意多個節點物件組成。每個節點物件都可以關聯文字和影象。另外,

web程式設計中的

treeview

的節點還可以顯示為超連結並與某個

url相關聯。每個節點還可以包括任意多個子節點物件。包含節點及其子節點的層次結構構成了

treeview

控制項所呈現的樹形結構。

下面是很典型的乙個例子,就是用treeview

繫結資料。資料一般符合樹形結構,如行政區域之間的關係、公司部門與部門員工之間關係、磁碟目錄檔案之間的關係等。  

父級與子級之間滿足一對多的關係,因此在資料庫設計中常用一字段來做本表主鍵的外來鍵,代表父級區域id

。當然,如果要方便求子孫的演算法(例如列舉武漢所有子區域)可以另加一欄位,記錄從根結點到當前結點所經歷的結點id。

思路分析:

1. 獲取表area

中的所有資料,存放到

datatable中。

2. 獲取根結點的資料並新增到根節點。根結點的處理常與子結點的遞迴處理不一樣,例如根結點的新增是在treeview1.nodes.add

裡面,而子結點遞迴是在父結點上新增,因此經常要分開處理。獲取根結點資料可用

datatable.select(「fareaid=-1」)來獲取。繫結結點時,將

node.text

設為區域的名字,

node.tag

設為區域對應的資料行

datarow

或者區域的

id,這樣遍歷子區域就知道父結點區域資訊,也方便應用程式獲取選中的結點對應的資料。

3. 遞迴遍歷子區域並新增到treeview

控制項中。遞迴方法引數為

node,

由父級node.tag

就能獲取父級區域資料資訊,進而獲取其子區域,獲取子區域可用    

datarow rows=datatable.select(「fareaid=」+父級區域

id)。獲取子區域後將其獲取的資訊繫結到新建的

node

物件,方法同第二步,然後遞迴呼叫自己。當區域不包含任何子區域時,遞迴終止,即

rows.length==0.

**如下:

public

partial

class

bindareaform : form

//獲取area所用資料

private

void

initdatatable()

private

void

bindareaform_load(

object

sender, eventargs e)

//繫結根節點

private

void

bindroot()

}//遞迴繫結子區域

private

void

bindchildareas(treenode fnode)

foreach

(datarow drow

inrows)}}

執行截圖:

Winfrom 中的timer應用

新做的winform東西,用timer解決了幾個問題 main頁面包含資料列表頁infolist,新增info資料按鈕 開啟infoadd頁面 開啟infolist的選單 遇到的問題 因為需要,在infolist中對特殊資料要設定背景顏色是紅色,預設繫結沒問題,在點新增按鈕新增資料時,因為infol...

Winfrom中窗體的傳值

常用方法 1.靜態變數 在窗體裡class from1中,寫入乙個靜態變數a,可以給其賦值,那麼在這個專案中,就可以通過from.a來呼叫。不推薦此種方法,不太安全。2.比較穩妥的方法,就是在傳值的過程中,首先在被傳值窗體from2中,建立乙個共有屬性b,作為接受者。在from1裡例項from2時,...

wpf帶checkbox的treeview開發

好久沒有寫博文了,其實也發現沒什麼可寫的,最近又搞起wpf來,其中用到了treeview,有點東西拿來分享一下。treeview預設是不帶checkbox的,但讓他帶checkbox也很簡單,設定一下樣式即可,當然這不是難點,也不是重點,重點是checked屬性怎麼關聯資料的問題,筆者也是查閱網上諸...