原創|其它|編輯:郝浩|2012-10-11 11:25:00.000|閱讀 5711 次
概述:TreeList控件可以同時顯示樹結構和其他數據列,即在一個列上建立父子關系展開或收縮,同時還可以顯示其他列的內容。在TreeList中同時引入了 Node和 Columns概念, 第一列為樹結構, 其余列為數據列, 任何列都可作為樹結構列(即拖動到第一列)顯示
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
TreeList控件可以同時顯示樹結構和其他數據列,即在一個列上建立父子關系展開或收縮,同時還可以顯示其他列的內容。
在TreeList中同時引入了 Node和 Columns概念, 第一列為樹結構, 其余列為數據列, 任何列都可作為樹結構列(即拖動到第一列)顯示。
實現多級樹---數據源綁定
在TreeList里添加要顯示列(第一列為樹結構,其他列為數據列),并指定FieldName為數據庫列名
指定KeyFieldName屬性為主鍵,ParentFieldName屬性為樹狀分組列。注意 ParentFieldName指定的列如果為空值,樹狀可能會混亂(只有一個根結點,其他為此節點的子結點)
用TreeList.DataSource = DataTable 綁定數據即可
(以下內容為轉載)多選框的三種狀態
樹形控件是使用頻率很高的一種控件。對于屬性控件往往需要下面兩個功能
1.TreeList帶有CheckBox,并且節點要有三種狀態(所有的子節點都選中,所有的子節點都沒選擇,一部分子節點選中)。使用DevXpress的TreeList控件很容易實現這一功能。
設置TreeList.OptionsView.ShowCheckBoxes = true //是否顯示CheckBox
設置TreeList.OptionsBehavior.AllowIndeterminateCheckState = true; //設置節點是否有中間狀態,即一部分子節點選中,一部分子節點沒有選中
設置這兩個屬性之后就實現了TreeList帶有CheckBox,并且節點有三種狀態。
2.選中父節點或者子節點相互影響的功能,如選擇父節點選擇所有子節點。綁定TreeList的兩個事件AfterCheckNode和BeforeCheckNode
實現功能的代碼如下:
private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e) { SetCheckedChildNodes(e.Node, e.Node.CheckState); SetCheckedParentNodes(e.Node, e.Node.CheckState); } private void treeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e) { e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked); } /// <summary> /// 設置子節點的狀態 /// </summary> /// <param name="node"></param> /// <param name="check"></param> private void SetCheckedChildNodes(TreeListNode node, CheckState check) { for (int i = 0; i < node.Nodes.Count; i++) { node.Nodes[i].CheckState = check; SetCheckedChildNodes(node.Nodes[i], check); } } /// <summary> /// 設置父節點的狀態 /// </summary> /// <param name="node"></param> /// <param name="check"></param> private void SetCheckedParentNodes(TreeListNode node, CheckState check) { if (node.ParentNode != null) { bool b = false; CheckState state; for (int i = 0; i < node.ParentNode.Nodes.Count; i++) { state = (CheckState)node.ParentNode.Nodes[i].CheckState; if (!check.Equals(state)) { b = !b; break; } } node.ParentNode.CheckState = b ? CheckState.Indeterminate : check; SetCheckedParentNodes(node.ParentNode, check); } }
VB.net語言代碼如下
Private Sub trlContact_AfterCheckNode(ByVal sender As System.Object, ByVal e As DevExpress.XtraTreeList.NodeEventArgs) Handles trlContact.AfterCheckNode SetCheckedChildNodes(e.Node, e.Node.CheckState) SetCheckedParentNodes(e.Node, e.Node.CheckState) End Sub '設置子結點的狀態 Private Sub SetCheckedChildNodes(ByVal node As TreeListNode, ByVal check As CheckState) For i As Integer = 0 To node.Nodes.Count - 1 node.Nodes(i).CheckState = check SetCheckedChildNodes(node.Nodes(i), check) Next End Sub '設置父結點的狀態 Private Sub SetCheckedParentNodes(ByVal node As TreeListNode, ByVal check As CheckState) If node.ParentNode Is Nothing = False Then Dim b As Boolean = False Dim state As CheckState For i As Integer = 0 To node.ParentNode.Nodes.Count - 1 state = node.ParentNode.Nodes(i).CheckState If check.Equals(state) = False Then b = Not b Exit For End If Next If b Then node.ParentNode.CheckState = CheckState.Indeterminate Else node.ParentNode.CheckState = check End If SetCheckedParentNodes(node.ParentNode, check) End If End Sub Private Sub trlContact_BeforeCheckNode(ByVal sender As System.Object, ByVal e As DevExpress.XtraTreeList.CheckNodeEventArgs) Handles trlContact.BeforeCheckNode If e.PrevState = CheckState.Checked Then e.State = CheckState.Unchecked Else e.State = CheckState.Checked End If End Sub
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載