DevExpress之TreeList复选框实现

概述:本文主要讲述DevExpress TreeList复选框实现,希望对大家有帮助。

一、TreeList的GetStateImage事件应用

方法一:此事件用于在tree之前设置显示的图片,具体使用方法是首先在窗体上放置imagelist,设置好图片,即可在事件中判断后,选择要显示的图片的索引值即可。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

private void treeList_GetStateImage(object sender, DevExpress.XtraTreeList.GetStateImageEventArgs e) 

  {

   CheckState check = GetCheckState(e.Node.Tag);

   if(check == CheckState.Unchecked)

    e.NodeImageIndex = 0;

   else if(check == CheckState.Checked)

    e.NodeImageIndex = 1;

   else e.NodeImageIndex = 2;

  }

方法二:为tree中指定的节点区分现实不同的图片

示例代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

private void roleTree_GetStateImage(object sender, DevExpress.XtraTreeList.GetStateImageEventArgs e)

        {

            if(e.Node.Id.ToString() == "0")

            {

                this.roleTree.Nodes[0].RootNode.StateImageIndex = 1;

            }

            else

            {

                e.NodeImageIndex = 0;

            }

        }

二、TreeList中运用MouseDown事件获取所选节点信息

提取tree中的值所用事件为MouseDown,在事件中填写如下代码:


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

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

private void roleTree_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{

if(e.Button == MouseButtons.Left)

{

DevExpress.XtraTreeList.TreeListHitInfo hInfo = roleTree.GetHitInfo(new Point(e.X, e.Y));

if(hInfo.HitInfoType == DevExpress.XtraTreeList.HitInfoType.StateImage)

{

// this.roleTree.DeleteNode(hInfo.Node);

if(MessageBox.Show("你确定要删除"+hInfo.Node[1].ToString()+"角色","提示信 息",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)

{

TB_Accounts_RolesEntity role = new TB_Accounts_RolesEntity();

role.iRoleID = Convert.ToInt32(hInfo.Node[1].ToString());

role.Retrieve();

role.Delete();

InitRoleTree();

}

else

{}

}

else if(hInfo.HitInfoType == DevExpress.XtraTreeList.HitInfoType.Cell)

{

// MessageBox.Show(hInfo.Node[1].ToString()); //获取选择的iRoleID

// SetCheckedNode(treeList.Nodes[0].Nodes[0]);

//得到指定iRoleID的全部的vDescript的允许的Table

string roleID = hInfo.Node[1].ToString();

string sqlString="SELECT dbo.TB_Accounts_Permissions.vDescript FROM dbo.TB_Accounts_Permissions INNER JOIN dbo.TB_Accounts_RolePermissions ON dbo.TB_Accounts_Permissions.iPermissionID = dbo.TB_Accounts_RolePermissions.iPermissionID WHERE 1=1"; //编写SQL语句

sqlString +=" and dbo.TB_Accounts_RolePermissions.iRoleID = ‘"+roleID+"‘";

//执行SQL语句

DataTable dt=Query.ProcessSql(sqlString,"EasySales");

for(int i = 0; i<dt.Rows.Count; i++)

{

string treeText = treeList.GetNodeByVisibleIndex(i).GetDisplayText(0).ToString();

if(treeText == dt.Rows[i]["vDescript"].ToString())

{

SetCheckedNode(treeList.Nodes[0].Nodes[i]);

}

}

/**/////// //判断treeList的行数和DataTable的行数是否一致

////// if(this.treeList.VisibleNodesCount.ToString()==dt.Rows.Count.ToString())

////// {

//////

////// //循环treeList的全部的vDescript的值

////// for(int i = 0; i<Convert.ToInt32(this.treeList.VisibleNodesCount.ToString());i++)

////// {

////// //判断treeList的vDescript的值和Table的vDescipte的值是否相等

////// if(this.treeList.GetNodeByVisibleIndex(i).GetDisplayText(0).ToString() != dt.Rows[i]["vDescript"].ToString())

////// {

////// MessageBox.Show("得到不同的vDescript");

//////// Checked();

////// }

////// else

////// {

////// MessageBox.Show("得到相同的vDescript");

//////// UnChecked();

////// }

////// }

////// }

////// else

////// {

////// MessageBox.Show("长度不一致");

////// }

}

}

}

三、TreeList前添加CheckBox的选择框,可实现点击父节点相应子节点全部选中的效果

TreeList中并为提供对应实现此功能的CheckBox自定义列,故必须用上面提到的GetStateImage事件添加三个(全选、部分全选、为选中)CheckBox的图片,具体样式可自己设计,然后放到窗体中的ImageList中去,触发及调用用到下面的代码:


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

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

private CheckState GetCheckState(object obj)

{

if(obj != null) return (CheckState)obj;

return CheckState.Unchecked;

}

private void SetCheckedNode(string treeText)

{

CheckState check = new CheckState();

check = CheckState.Checked;

}

private void SetCheckedNode(DevExpress.XtraTreeList.Nodes.TreeListNode node)

{

CheckState check = GetCheckState(node.Tag);

if(check == CheckState.Indeterminate || check == CheckState.Unchecked) check = CheckState.Checked;

else check = CheckState.Unchecked;

treeList.BeginUpdate();

node.Tag = check;

SetCheckedChildNodes(node, check);

SetCheckedParentNodes(node, check);

treeList.EndUpdate();

}

private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)

{

for(int i = 0; i < node.Nodes.Count; i++)

{

node.Nodes[i].Tag = check;

SetCheckedChildNodes(node.Nodes[i], check);

}

}

private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)

{

if(node.ParentNode != null)

{

bool b = false;

for(int i = 0; i < node.ParentNode.Nodes.Count; i++)

{

if(!check.Equals(node.ParentNode.Nodes[i].Tag))

{

b = !b;

break;

}

}

node.ParentNode.Tag = b ? CheckState.Indeterminate : check;

SetCheckedParentNodes(node.ParentNode, check);

}

}

private void treeList_GetStateImage(object sender, DevExpress.XtraTreeList.GetStateImageEventArgs e)

{

CheckState check = GetCheckState(e.Node.Tag);

if(check == CheckState.Unchecked)

e.NodeImageIndex = 0;

else if(check == CheckState.Checked)

e.NodeImageIndex = 1;

else e.NodeImageIndex = 2;

}

private void treeList_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)

{

if(e.KeyData == Keys.Space)

SetCheckedNode(treeList.FocusedNode);

}

private void treeList_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{

if(e.Button == MouseButtons.Left)

{

DevExpress.XtraTreeList.TreeListHitInfo hInfo = treeList.GetHitInfo(new Point(e.X, e.Y));

if(hInfo.HitInfoType == DevExpress.XtraTreeList.HitInfoType.StateImage)

SetCheckedNode(hInfo.Node);

}

}

private void roleTree_GetStateImage(object sender, DevExpress.XtraTreeList.GetStateImageEventArgs e)

{

if(e.Node.Id.ToString() == "0")

{

this.roleTree.Nodes[0].RootNode.StateImageIndex = 1;

}

else

{

e.NodeImageIndex = 0;

}

}

这样就可实现上述功能。

四、Grid中设置、获取指定Cell的值,用下面的方法:

获取:GridView.GetRowCellValue()

设置:GridView.SetRowCellValue()

时间: 2024-10-29 19:08:31

DevExpress之TreeList复选框实现的相关文章

DevExpress XtraTreeList TreeList复选框选择

权限管理涉及复选框多勾选. 1.控件属性设置 TreeList.OperationView.ShowCheckBoxes=true;用于显示CheckBox: TreeList.OperationBehavior.AllowIndeterminateCheckState=true;  设置CheckBox允许第三种状态. 2.控件事件绑定 要实现选择父级节点选择.子级节点全部选中.父级节点未选择.反之.子级节点部分选中.父级节点为第三种状态. private void treeList1_Aft

DevExpress XtraGrid RepositoryItemCheckEdit 复选框多选的解决方法

1. RepositoryItemCheckEdit默认有三种状态,选中状态.未选中状态和半选中状态(半选中状态通常用在TreeList中如果父节点下的子节点有选中的有未选中的,则父节点状态为半选中状态).如果RepositoryItemCheckEdit所在的列未绑定数据源,那么该列默认只可以单选:如果绑定了数据源,那么可以同时多选. 2. 问题描述: 上述描述的ColumEdit关联FieldName数据源,但是在设计功能中并不仅仅这样就可以同时多选,还是选中后,在Grid其他的位置再单击鼠

DevExpress XtraTreeList的复选框 禁用

树的2个事件代码如下,通过节点的tag判断是否禁用节点前的复选框.树的节点加载时设置要禁用的节点tag为-1,不禁用的则设为相关的值 private void treeListPer_CustomDrawNodeCheckBox(object sender, DevExpress.XtraTreeList.CustomDrawNodeCheckBoxEventArgs e)        {            //TreeListNode listNode = sender as TreeL

实现在DevExpress.XtraGrid.GridControl的列头绘制复选框以实现全选的功能

首先新建一个Win Form测试项目,拖一个GridControl控件到窗体上. 1 public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 8 private Rectangle checkBoxColumnHeaderRect = Rectangle.Empty; 9 private GridColumn checkBoxColumn = null; 10 privat

DevExpress Gridcontrol 表格头复选框 全选全不选

新建窗体 拖一个Gridcontrol 添加两列 col1,col2 public partial class XtraForm2 : DevExpress.XtraEditors.XtraForm { public XtraForm2() { InitializeComponent(); } private void XtraForm2_Load(object sender, EventArgs e) { //设置复选框 gridView1.OptionsSelection.MultiSele

dev 表格添加复选框 ,可以勾选多行

this.repositoryItemCheckEdit1.QueryCheckStateByValue += new DevExpress.XtraEditors.Controls.QueryCheckStateByValueEventHandler(re3_QueryCheckStateByValue); //判断表格的数据勾选复选框 void re3_QueryCheckStateByValue(object sender, DevExpress.XtraEditors.Controls.

GridControl 选择列、复选框全选(下)

功能:        删除选中行 前台调用: string str=""; GridDelete(gv, "chk", out str); MessageBox.Show(str); 底层类: /// <summary> /// 删除所有选中行 /// </summary> /// <param name="gv">GirdView 名称</param> /// <param name=&qu

GridControl 选择列、复选框全选

说明: GirdControl 中添加一列,这一列不是写在数据库中的,而是代码中添加的. 图示: 底层类代码: #region GridControl 全选 /// <summary> /// 是否选中 /// </summary> private static bool chkState = false; //复选框列名称 private static string chkFileName = ""; //复选框列宽 private static int ch

CheckedListBoxControl 实现复选框的单选与多选功能

由于工作需要,需要实现复选框的单选与多选功能,找了好多资料都不是很全,经过两天苦苦的挖挖挖,终于完成啦O(∩_∩)O哈哈~ 用DEV控件中的CheckedListBoxControl控件,当然VS中的复选框组合控件应该按照下面方法也可以实现该功能,可以试下(⊙o⊙)哦 代码来啦O(∩_∩)O哈哈~ 1 //首先触发SelectedIndexChanged事件,然后再触发ItemCheck事件 2 3 //存储选中的复选框的值 4 string strGXY=string.Empty; 5 pri