概述:本文主要講述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()