DevExpress TreeList使用教程之绑定多级树

DevExpress TreeList使用教程之绑定多级树


概述:TreeList控件可以同时显示树结构和其他数据列,即在一个列上建立父子关系展开或收缩,同时还可以显示其他列的内容。在TreeList中同时引入了 Node和 Columns概念, 第一列为树结构, 其余列为数据列, 任何列都可作为树结构列(即拖动到第一列)显示

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

实现功能的代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

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语言代码如下


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

Private Sub trlContact_AfterCheckNode(ByVal sender As System.ObjectByVal 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 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 As Boolean False

Dim state As CheckState

For 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 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.ObjectByVal 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

时间: 2024-10-25 06:33:46

DevExpress TreeList使用教程之绑定多级树的相关文章

DevExpress TreeList利用递归绑定数据

private void TreeListBind(DataTable dt, int p) { treeList1.Nodes.Clear(); if (dt.Rows.Count < 1) return; DataView dv = new DataView(dt); dv.RowFilter = "ParentFieldName=" + p; if (dv.Count < 1) return; TreeListNode Node = treeList1.AppendN

DevExpress TreeList 那些事儿

1:TreeList绑定数据源 当我们给予TreeList 的 parentFieldName 和 KeyFieldName 两个属性之后 会自动的生成树结构. 1 var sql = @" SELECT * FROM TRAININGANDPROJECT"; 2 DataTable dt = SQLiteHelper.ExecuteTable(sql); 3 treeList1.DataSource = dt; // 将DataTable绑定到 TreeList中. 4 treeLi

DevExpress TreeList添加右键菜单问题

添加右键流程: 1.先在窗体上拖两个控件,分别是popupMenu和barManager 2.barManager中绑定form属性为当前窗体名称 3.点击barManager右键选择customize,可直接添加子菜单,如果需要有工具栏.菜单栏.状态栏.怎选择Designer,可添加,然后在选择customize,添加command命令,再command选中菜单中执行命令 4.绑定右键菜单事件:在MouseDown事件中处理事件 --------------------------------

[WinForm][DevExpress][TreeList]向上递归,获取公共父节点

最近项目开发中,需要获取到公共节点,如图: 譬如,当点击"Test103-2"节点,其类型是"灯"类型,那怎么获取到"中心区域"这个类型是"地域"的公共节点了?(不知道描述清楚木有哈) 核心代码: /// <summary> /// 向上递归,获取符合条件的父节点 /// </summary> /// <param name="node">需要向上递归的节点</pa

如何让DevExpress TreeList的每个结点高亮显示?

概述:如何让DevExpress TreeList的每个节点高亮显示? 如何让DXperience TreeList的每个节点高亮显示? 效果如下: private void treeList1_CustomDrawNodeCell(object sender, DevExpress.XtraTreeList.CustomDrawNodeCellEventArgs e)        {             TreeList node = sender as TreeList;       

Android 实现自定义多级树控件和全选与反选的效果

博文开始之前,首先要感谢大牛:(lmj623565791),本博文是在其博文http://blog.csdn.net/lmj623565791/article/details/40212367基础上进一步的修改而来. 本博文主要是利用ListView实现多级树控件,并通过CheckBox来对各节点的全选与反选的功能,首先来看一下效果: 对于多级树的显示其实就是通过数据中各个节点的关系,通过不同的缩进来达到树的效果.而数据中主要要把握id,父节点pId,name的关系,来显示其效果. 代码实现如下

[WinForm][DevExpress][TreeList]节点互斥

关键代码: /// <summary> /// 节点互斥同步 /// 说明 /// eg: ///TreeListNode _node = e.Node; ///_node.SyncMutexNodeCheckState(_node.CheckState, n => n.GetNodeType() == NodeType.Cab); /// </summary> /// <param name="node">需要互斥同步的节点</para

[WinForm][DevExpress][TreeList]父子节点CheckState状态同步

关键代码: /// <summary> ///同步父子节点勾选状态 ///说明 ///在AfterCheckNode事件中使用代码 ///eg:e.Node.SyncNodeCheckState(e.Node.CheckState); /// </summary> /// <param name="node">需要同步的节点</param> /// <param name="check">节点当前勾选状态&

Android 实现自己定义多级树控件和全选与反选的效果

博文開始之前,首先要感谢大牛:(lmj623565791),本博文是在其博文http://blog.csdn.net/lmj623565791/article/details/40212367基础上进一步的改动而来. 本博文主要是利用ListView实现多级树控件,并通过CheckBox来对各节点的全选与反选的功能,首先来看一下效果: 对于多级树的显示事实上就是通过数据中各个节点的关系,通过不同的缩进来达到树的效果.而数据中主要要把握id,父节点pId.name的关系,来显示其效果. 代码实现例