如何利用递归算法,做权限设计(C#语言版的源代码)

解决方案 »

  1.   

    如果向上递归,最后将会递归到root的
    那不如大家都root权限
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Data;
    using System.Windows.Forms;namespace HR.Contorls
    {
        /// <summary>
        /// 有关树TreeView控件的操作的公用组件
        /// </summary>    public class TreeViewC
        {
            #region "保存树到DataTable"
            /// <summary>
            /// 保存树结点到DataTable
            /// </summary>
            /// <param name="TreeView1">要保存的树控件</param>
            /// <param name="strParentNumberFieldText">父节点编号字段的名称</param>
            /// <param name="strNumberFieldText">当前节点编号字段的名称</param>
            /// <param name="strNameFieldText">当前节点Text字段的名称</param>
            /// <returns></returns>        public DataTable SaveToDataTable(TreeView TreeView1, string strParentNumberFieldText, string strNumberFieldText, string strNameFieldText)
            {
                DataTable DT = new DataTable("HRTreeView");
                DataColumn ParentNumber = new DataColumn(strParentNumberFieldText, System.Type.GetType("System.String"));
                ParentNumber.MaxLength = 20;
                ParentNumber.AllowDBNull = true;            DataColumn Number = new DataColumn(strNumberFieldText, System.Type.GetType("System.String"));
                ParentNumber.MaxLength = 20;
                ParentNumber.AllowDBNull = false;            DataColumn Name = new DataColumn(strNameFieldText, System.Type.GetType("System.String"));
                ParentNumber.MaxLength = 500;
                ParentNumber.AllowDBNull = false;            DT.Columns.Add(ParentNumber);
                DT.Columns.Add(Number);
                DT.Columns.Add(Name);            FindTreeView(TreeView1, DT);
                return DT;
            }
            /// <summary>
            ///要查找遍历的树
            /// </summary>
            /// <param name="TreeView1">The tree view1.</param>
            /// <param name="DT">The DT.</param>
            private void FindTreeView(TreeView TreeView1, DataTable DT)
            {
                foreach (TreeNode TempNode in TreeView1.Nodes)
                {
                    ForTreeNodeToDataTable(TempNode, DT);
                }        }
            /// <summary>
            /// 遍历每一个传入的一级节点所有子节点到DataRow
            /// </summary>
            /// <param name="TempNode">一级节点</param>
            /// <param name="DT">DataTable</param>
            private void ForTreeNodeToDataTable(TreeNode TempNode, DataTable DT)
            {
                DataRow DR;
                DR = DT.NewRow();
                if (TempNode.Parent == null)
                {
                    DR[0] = "";
                }
                else
                {
                    DR[0] = TempNode.Parent.Tag;
                }
                DR[1] = TempNode.Tag.ToString();
                DR[2] = TempNode.Text;
                DT.Rows.Add(DR);
                foreach (TreeNode aNode in TempNode.Nodes)
                {
                    ForTreeNodeToDataTable(aNode, DT);            }
            }
            #endregion        #region "设置树结点的Tag"
            /// <summary>
            /// 设置树结点的Tag
            /// </summary>
            /// <param name="TreeView1">要设置的TreeView<param>
            /// <returns>True/False</returns>
            public bool SetTreeViewTag(TreeView TreeView1)
            {
                try
                {
                    foreach (TreeNode TempNode in TreeView1.Nodes)
                    {
                        ForTreeNodeSetTag(TempNode);
                                        }
                    return true;
                }
                catch
                {
                    return false;
                
                }
                       }
            /// <summary>
            ///遍历TreeView的节点
            /// </summary>
            /// <param name="TempNode">传入的结点</param>
            private void ForTreeNodeSetTag(TreeNode TempNode)
            {
                SetTagNumber(TempNode);
                foreach (TreeNode aNode in TempNode.Nodes)
                {
                    ForTreeNodeSetTag(aNode);
                }
               
            
            }
            private void SetTagNumber(TreeNode TempNode)
            {
                string TTag = "";
                if (TempNode.Parent == null)
                {
                    if (TempNode.PrevNode == null)
                    {
                        TTag = "01";//01 02 0201 0202 2,4,6,8,10 ……
                    }                else
                    {                    TTag = (System.Convert.ToInt64(TempNode.PrevNode.Tag.ToString()) + 1).ToString().PadLeft(TempNode.PrevNode.Tag.ToString().Length, '0');                }
                }
                else
                {
                    if (TempNode.PrevNode == null)
                    {
                        TTag = TempNode.Parent.Tag.ToString() + "01";
                    }
                    else
                    {
                        TTag = (System.Convert.ToInt64(TempNode.PrevNode.Tag.ToString()) + 1).ToString().PadLeft(TempNode.PrevNode.Tag.ToString().Length, '0');
                    
                    }            }
                TempNode.Tag = TTag;
            }
         
                       #endregion
        }
    }