带有CheckBox的TreeList

来源:互联网 发布:域名交易平台源码 编辑:程序博客网 时间:2024/04/29 18:41

Design代码



partialclassForm1


   {


       ///<summary>


       ///必需的设计器变量。


       ///</summary>


       privateSystem.ComponentModel.IContainercomponents = null;


 


       ///<summary>


       ///清理所有正在使用的资源。


       ///</summary>


       ///<paramname="disposing">如果应释放托管资源,为true;否则为false</param>


       protectedoverridevoidDispose(bool disposing)


       {


           if(disposing && (components !=null))


           {


               components.Dispose();


           }


           base.Dispose(disposing);


       }


 


       #region Windows 窗体设计器生成的代码


 


       ///<summary>


       ///设计器支持所需的方法 - 不要


       ///使用代码编辑器修改此方法的内容。


       ///</summary>


       privatevoidInitializeComponent()


       {


           this.treeList1=new DevExpress.XtraTreeList.TreeList();


           this.treeListColumn1=new DevExpress.XtraTreeList.Columns.TreeListColumn();


           this.treeListColumn2=new DevExpress.XtraTreeList.Columns.TreeListColumn();


           this.treeListColumn3=new DevExpress.XtraTreeList.Columns.TreeListColumn();


           this.treeListColumn4=new DevExpress.XtraTreeList.Columns.TreeListColumn();


           this.button1=new System.Windows.Forms.Button();


           ((System.ComponentModel.ISupportInitialize)(this.treeList1)).BeginInit();


           this.SuspendLayout();


           //


           //treeList1


           //


           this.treeList1.Columns.AddRange(newDevExpress.XtraTreeList.Columns.TreeListColumn[]{


           this.treeListColumn1,


           this.treeListColumn2,


           this.treeListColumn3,


           this.treeListColumn4});


           this.treeList1.Location=new System.Drawing.Point(2, 2);


           this.treeList1.Name="treeList1";


           this.treeList1.OptionsBehavior.Editable=false;


           this.treeList1.OptionsMenu.EnableColumnMenu=false;


           this.treeList1.OptionsView.ShowCheckBoxes=true;


           this.treeList1.OptionsView.ShowIndicator=false;


           this.treeList1.Size=new System.Drawing.Size(301, 377);


           this.treeList1.TabIndex= 0;


           this.treeList1.AfterCheckNode+=new DevExpress.XtraTreeList.NodeEventHandler(this.treeList1_AfterCheckNode);


           //


           //treeListColumn1


           //


           this.treeListColumn1.Caption="权限列表";


           this.treeListColumn1.FieldName="treeListColumn1";


           this.treeListColumn1.MinWidth= 32;


           this.treeListColumn1.Name="treeListColumn1";


           this.treeListColumn1.Visible=true;


           this.treeListColumn1.VisibleIndex= 0;


           this.treeListColumn1.Width= 91;


           //


           //treeListColumn2


           //


           this.treeListColumn2.Caption="treeListColumn2";


           this.treeListColumn2.FieldName="treeListColumn2";


           this.treeListColumn2.Name="treeListColumn2";


           //


           //treeListColumn3


           //


           this.treeListColumn3.Caption="treeListColumn3";


           this.treeListColumn3.FieldName="treeListColumn3";


           this.treeListColumn3.Name="treeListColumn3";


           //


           //treeListColumn4


           //


           this.treeListColumn4.Caption="treeListColumn4";


           this.treeListColumn4.FieldName="treeListColumn4";


           this.treeListColumn4.Name="treeListColumn4";


           //


           //button1


           //


           this.button1.Location=new System.Drawing.Point(218, 385);


           this.button1.Name="button1";


           this.button1.Size=new System.Drawing.Size(75, 23);


           this.button1.TabIndex= 1;


           this.button1.Text="确定";


           this.button1.UseVisualStyleBackColor=true;


           this.button1.Click+=new System.EventHandler(this.button1_Click);


           //


           //Form1


           //


           this.AutoScaleDimensions=new System.Drawing.SizeF(6F, 12F);


           this.AutoScaleMode= System.Windows.Forms.AutoScaleMode.Font;


           this.ClientSize=new System.Drawing.Size(305, 417);


           this.Controls.Add(this.button1);


           this.Controls.Add(this.treeList1);


           this.Name="Form1";


           this.Text="Form1";


           ((System.ComponentModel.ISupportInitialize)(this.treeList1)).EndInit();


           this.ResumeLayout(false);


 


       }


 


       #endregion


 


       privateDevExpress.XtraTreeList.TreeListtreeList1;


       privateDevExpress.XtraTreeList.Columns.TreeListColumntreeListColumn1;


       privateDevExpress.XtraTreeList.Columns.TreeListColumntreeListColumn2;


       privateDevExpress.XtraTreeList.Columns.TreeListColumntreeListColumn3;


       privateDevExpress.XtraTreeList.Columns.TreeListColumntreeListColumn4;


       privateSystem.Windows.Forms.Button button1;


   }


CS代码



publicpartialclassForm1 : Form


   {


       ///<summary>


       ///所有权限


       ///</summary>


       privateList<Privilege>listPrivilege = newList<Privilege>();


 


       ///<summary>


       ///默认的权限


       ///</summary>


       privateList<Privilege>listPrivilegeMoRen = newList<Privilege>();


 


       publicForm1()


       {


           InitializeComponent();


           InitPrivilege();


           InitTreeList();


       }


 


       privatevoidInitPrivilege()


       {


           listPrivilege.Add(newPrivilege { PrivilegeId = 10001, PrivilegeName = "管理", ParentPrivlegeId = 1, MenuLevel = 1 });


           listPrivilege.Add(newPrivilege { PrivilegeId = 10002, PrivilegeName = "系统", ParentPrivlegeId = 2, MenuLevel = 1 });


           listPrivilege.Add(newPrivilege { PrivilegeId = 10003, PrivilegeName = "用户管理", ParentPrivlegeId = 1, MenuLevel = 2 });


           listPrivilege.Add(newPrivilege { PrivilegeId = 10004, PrivilegeName = "修改密码", ParentPrivlegeId = 1, MenuLevel = 2 });


           listPrivilege.Add(newPrivilege { PrivilegeId = 10005, PrivilegeName = "登录", ParentPrivlegeId = 2, MenuLevel = 2 });


           listPrivilege.Add(newPrivilege { PrivilegeId = 10006, PrivilegeName = "文件下载", ParentPrivlegeId = 2, MenuLevel = 2 });


 


           listPrivilegeMoRen.Add(newPrivilege { PrivilegeId = 10001, PrivilegeName = "管理", ParentPrivlegeId = 1, MenuLevel = 1 });


           listPrivilegeMoRen.Add(newPrivilege { PrivilegeId = 10003, PrivilegeName = "用户管理", ParentPrivlegeId = 1, MenuLevel = 2 });


           listPrivilegeMoRen.Add(newPrivilege { PrivilegeId = 10004, PrivilegeName = "修改密码", ParentPrivlegeId = 1, MenuLevel = 2 });


       }


 


       privatevoidInitTreeList()


       {


           List<Privilege>listRoot = listPrivilege.Where(p => p.MenuLevel == 1).ToList();


           //加载所有的根节点


           foreach(Privilege pri inlistRoot)


           {


               this.treeList1.AppendNode(newobject[]{ pri.PrivilegeName, pri.ParentPrivlegeId, pri.PrivilegeId, pri }, -1);


           }


           List<Privilege>listOne = listPrivilege.Where(p => p.MenuLevel == 2).ToList();


 


           //加载一级子节点


           foreach(Privilege pri inlistOne)


           {


               for (inti = 0; i < treeList1.Nodes.Count; i++)


               {


                   int int_parentId = pri.ParentPrivlegeId;


                   if (int_parentId == (int)(treeList1.Nodes[i].GetValue(this.treeListColumn2)))


                   {


                       this.treeList1.AppendNode(newobject[]{ pri.PrivilegeName, pri.ParentPrivlegeId, pri.PrivilegeId, pri },treeList1.Nodes[i].Id);


                   }


               }


           }


           //将所有的树形节点展开


           this.treeList1.ExpandAll();


 


           foreach(TreeListNode t inthis.treeList1.Nodes)


           {


               if(t !=null)


               {


                   SetNodeChecked(t, listPrivilegeMoRen);


               }


           }


       }


 


       privatevoidtreeList1_AfterCheckNode(object sender,DevExpress.XtraTreeList.NodeEventArgs e)


       {


           if(e.Node ==null)


           {return;}


           //选中父节点,其下的所有子节点都被选中


           if(e.Node.CheckState ==CheckState.Checked)


           {


               if (e.Node.HasChildren)


               {


                   CheckNode(e.Node);


               }


               if (e.Node.ParentNode != null)


               {


                   if (e.Node.ParentNode.CheckState != CheckState.Checked)


                   {


                       e.Node.ParentNode.CheckState= CheckState.Checked;


                       SetParentNodeChecked(e.Node.ParentNode);


                   }


               }


           }


           if(e.Node.CheckState ==CheckState.Unchecked)


           {


               if (e.Node.ParentNode != null)


               {


                   //判断一下该父节点下的子节点是否都已经处于非选中状态


                   if(IsAllChildrenUnChecked(e.Node.ParentNode))


                   {


                       e.Node.ParentNode.CheckState =CheckState.Unchecked;


                   }


               }


               //m_role.PrivilegesList.Remove(((Privilege)e.Node.GetValue(this.pri)));


           }


           //取消父节点,其下的所有子节点都是处于非选中状态


           if(e.Node.CheckState ==CheckState.Unchecked)


           {


               if(e.Node.HasChildren)


               {


                   ClearNode(e.Node);


               }


           }


           if(e.Node.CheckState ==CheckState.Checked)


           {


               //m_role.PrivilegesList.Add(((Privilege)e.Node.GetValue(this.pri)));


           }


       }


 


       privateboolIsAllChildrenUnChecked(TreeListNode tnode)


       {


           foreach(TreeListNode cNode intnode.Nodes)


           {


               if (cNode.CheckState != CheckState.Unchecked)


               {


                   returnfalse;


               }


           }


           returntrue;


       }


 


       privatevoidClearNode(TreeListNode node)


       {


           foreach(TreeListNode cNode innode.Nodes)


           {


               if (cNode != null)


               {


                   cNode.CheckState =CheckState.Unchecked;


               }


               if (cNode.HasChildren)


               {


                   ClearNode(cNode);


               }


           }


       }


 


       //如果点击了父节点,则相应的子节点全部被选中


       privatevoidCheckNode(DevExpress.XtraTreeList.Nodes.TreeListNodenode)


       {


           foreach(TreeListNode cNode innode.Nodes)


           {


               if (cNode != null)


               {


                   if (cNode.CheckState == CheckState.Unchecked)


                   {


                       cNode.CheckState = CheckState.Checked;


                       //m_role.PrivilegesList.Add(((Privilege)cNode.GetValue(this.pri)));


                   }


               }


               if (cNode.HasChildren)


               {


                   CheckNode(cNode);


               }


           }


       }


 


       privatevoidSetNodeChecked(TreeListNode node, List<Privilege> listP)


       {


           if(listP !=null)


           {


               if (node != null)


               {


                   for (inti = 0; i < listP.Count; i++)


                   {


                       if(listP[i] !=null && (int)node.GetValue(this.treeListColumn3)== listP[i].PrivilegeId)


                       {


                           node.CheckState = CheckState.Checked;


                           SetParentNodeChecked(node);


                       }


                   }


                   foreach (TreeListNodetnodein node.Nodes)


                   {


                       SetNodeChecked(tnode,listP);


                   }


 


               }


               if (node == null)


                   return;


           }


       }


 


       //如果选中子节点,则相应的父节点都被选中


       privatevoidSetParentNodeChecked(TreeListNode node)


       {


           try


           {


               if (node.ParentNode != null)


               {


                   if (node.ParentNode.CheckState == CheckState.Unchecked)


                   {


                       node.ParentNode.CheckState =CheckState.Checked;


                       //m_role.PrivilegesList.Add(((Privilege)node.GetValue(this.pri)));


                   }


                   SetParentNodeChecked(node.ParentNode);


               }


               if (node.ParentNode == null)


                   return;


           }


           catch(Exception)


           {


           }


       }


 


       classPrivilege


       {


           ///<summary>


           ///权限ID


           ///</summary>


           publicintPrivilegeId { get;set;}


 


           ///<summary>


           ///权限名称


           ///</summary>


           publicstringPrivilegeName { get;set;}


 


           ///<summary>


           ///父节点


           ///</summary>


           publicintParentPrivlegeId { get;set;}


 


           ///<summary>


           ///菜单级别


           ///</summary>


           publicintMenuLevel { get;set;}


       }


 


       privatevoidbutton1_Click(object sender, EventArgse)


       {


           List<int>listRolePrivelege = newList<int>();


           foreach(TreeListNode tnode inthis.treeList1.Nodes)


           {


               GetAllPrivelege(tnode, listRolePrivelege);


           }


       }


 


       //递归树,找出所有的选中权限


       publicvoidGetAllPrivelege(TreeListNode tnode, List<int>listRolePrivelege)


       {


           if(tnode !=null)


           {


               if (tnode.CheckState == CheckState.Checked)


               {


                   listRolePrivelege.Add((int)tnode.GetValue(this.treeListColumn3));


               }


               foreach (TreeListNodenodein tnode.Nodes)


               {


                   GetAllPrivelege(node, listRolePrivelege);


               }


           }


           else


           {


               return;


           }


       }


   }



0 0