DevExpress TreeList控制元件的複選框
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
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
DevExpress的TreeList要想在節點前面顯示覆選框,得修改屬性OptionsView->ShowCheckBoxes=True
複選框的子節點與父節點統一的規則有:
1、選擇某一節點時,該節點的子節點全部選擇
2、取消某一節點時,該節點的子節點全部取消選擇
3、某節點的子節點全部選擇時,該節點選擇
4、某節點的子節點未全部選擇時,該節點不選擇
[csharp] view plain copy
- #region 節點選中前事件
- private void treeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
- {
- if (e.PrevState == CheckState.Checked)
- {
- e.State = CheckState.Unchecked;
- }
- else
- {
- e.State = CheckState.Checked;
- }
- }
- #endregion
- #region 節點選中後事件
- private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
- {
- SetCheckedChildNodes(e.Node, e.Node.CheckState);
- SetCheckedParentNodes(e.Node, e.Node.CheckState);
- }
- #endregion
- #region 設定子節點狀態
- private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)
- {
- for (int i = 0; i < node.Nodes.Count; i++)
- {
- node.Nodes[i].CheckState = check;
- SetCheckedChildNodes(node.Nodes[i], check);
- }
- }
- #endregion
- #region 設定父節點狀態
- private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.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;
- }
- }
- if (b)
- {
- node.ParentNode.CheckState = CheckState.Indeterminate;
- }
- else
- {
- node.ParentNode.CheckState = check;
- }
- SetCheckedParentNodes(node.ParentNode, check);
- }
- }
- #endregion
給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow
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
DevExpress的TreeList要想在節點前面顯示覆選框,得修改屬性OptionsView->ShowCheckBoxes=True
複選框的子節點與父節點統一的規則有:
1、選擇某一節點時,該節點的子節點全部選擇
2、取消某一節點時,該節點的子節點全部取消選擇
3、某節點的子節點全部選擇時,該節點選擇
4、某節點的子節點未全部選擇時,該節點不選擇
- #region 節點選中前事件
- private void treeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
- {
- if (e.PrevState == CheckState.Checked)
- {
- e.State = CheckState.Unchecked;
- }
- else
- {
- e.State = CheckState.Checked;
- }
- }
- #endregion
- #region 節點選中後事件
- private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
- {
- SetCheckedChildNodes(e.Node, e.Node.CheckState);
- SetCheckedParentNodes(e.Node, e.Node.CheckState);
- }
- #endregion
- #region 設定子節點狀態
- private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)
- {
- for (int i = 0; i < node.Nodes.Count; i++)
- {
- node.Nodes[i].CheckState = check;
- SetCheckedChildNodes(node.Nodes[i], check);
- }
- }
- #endregion
- #region 設定父節點狀態
- private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.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;
- }
- }
- if (b)
- {
- node.ParentNode.CheckState = CheckState.Indeterminate;
- }
- else
- {
- node.ParentNode.CheckState = check;
- }
- SetCheckedParentNodes(node.ParentNode, check);
- }
- }
- #endregion