Deverpress7.1中没有ShowCheckBox属性时的实现办法
来源:互联网 发布:手环值得买吗 知乎 编辑:程序博客网 时间:2024/06/06 07:06
一、TreeList的GetStateImage事件应用。
///private void treeList_GetStateImage(object sender, DevExpress.XtraTreeList.GetStateImageEventArgs e){ CheckState check = GetCheckState(e.Node.Tag); if(check == CheckState.Unchecked) e.NodeImageIndex = 0; ///////"0"为没有勾的图标 else if(check == CheckState.Checked) e.NodeImageIndex = 1; else e.NodeImageIndex = 2;}///
方法二:为tree中指定的节点区分现实不同的图片。
事例代码如下:
///
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,在事件中填写如下代码
///
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) { 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) { //得到指定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前添加CheckBox的选择框,可实现点击父节点相应子节点全部选中的效果。
TreeList中并为提供对应实现此功能的CheckBox自定义列,故必须用上面提到的GetStateImage事件添加三个(全选、部分全选、为选中)CheckBox的图片,具体样式可自己设计,然后放到窗体中的ImageList中去,触发及调用用到下面的代码:
//
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; } }
O了!!!
说明:那三张图片为在Dev的例子中可以找到……
- Deverpress7.1中没有ShowCheckBox属性时的实现办法
- 解决word2007|2010样式中只有标题1,没有标题2、3的办法
- ECLIPSE文件图标中没有VSS标记的办法
- ECLIPSE文件图标中没有VSS标记的办法
- java中没有无符号类型的循环办法
- windows批处理中实现延时的办法
- 有没有更好的办法
- ArcGIS中使用工具后,没有反应,没有结果文件生成的问题解决办法。
- 解决response.sendirect()中target属性的办法
- 运行程序时,控制台没有信息的问题解决办法
- idea 中 没有svn选项处理办法
- dede 直接跳转而没有中间跳转页的实现办法(续)。
- vc++中没有属性和方法的提示的解决办法
- Android Json解析中如何解析没有key的解析办法
- Eclipse中的Java工程中没有class文件以及看不到class文件的处理办法
- Android开发:几个在Andriod2.1版本中没有的属性
- PowerPoint PIA中Application没有RecentFile属性的解决方案
- android studio 导出的jar中没有主清单属性
- Ruby on rails开发从头来(四十八)- ActiveRecord基础(动态查询)
- HLSL固有函数 [Intrinsic Functions (DirectX HLSL)]
- Ruby on rails开发从头来(四十七)- ActiveRecord基础(强大的find方法)
- Linux下通用线程池的构建
- DirectSound中关于IID_IDirectSound无法解析的问题
- Deverpress7.1中没有ShowCheckBox属性时的实现办法
- 炎龙传说3攻略之如何加属性值
- Ruby on rails开发从头来(四十六)- ActiveRecord基础(SQL和Active Record)
- EXCEL中汉字转拼音
- 关于js的正则 test,match,exec
- Ruby on rails开发从头来(四十五)- ActiveRecord基础(读取记录)
- Ruby on rails开发从头来(四十四)- ActiveRecord基础(创建记录)
- OCX和DLL的区别
- C#,Dictionary