winfrom下tree的使用

来源:互联网 发布:智慧树网络选修课登录 编辑:程序博客网 时间:2024/06/06 09:37

  #region 循环添加其子节点
  /// <summary>
  /// 循环添加其子节点
  /// </summary>
  /// <param name="parentNode">父节点</param>
  /// <param name="len">字符长度</param>
  /// <param name="parentrow">父行</param>
  ///  <param name="parentkey">父Key</param>
  ///  <param name="childDs">相同DataSet</param>
  private void RowSelect(TreeNode parentNode,int len,DataRow parentrow,string parentkey,DataSet childDs)
  {
   len = len+2;
   foreach(DataRow crw in childDs.Tables[0].Rows)
   {
    string chdKey = crw["FKey"].ToString();
    if(chdKey.Length==len && chdKey.Substring(0,len-2)==parentkey)
    {
     TreeNode newnode=AddChildNode(parentNode,crw);
     //递归
     RowSelect(newnode,len, crw , chdKey, childDs);
    }
   }
  }
  #endregion

  #region CreateNode创建一个节点
  /// <summary>
  /// 创建一个节点
  /// </summary>
  /// <param name="nodeText">显示的字符</param>
  /// <param name="nodeNo">节点的标识</param>
  /// <param name="nodeID" >节点的ID</param>
  /// <param name="imgIndex">节点正常状态下的图标</param>
  /// <param name="selectImgIndex">节点被选中时的图标</param>
  /// <param name="nodeType">节点的类别</param>
  /// <param name="chk">节点checked</param>
  /// <returns>返回创建的节点</returns>
  private TreeNode CreateNode(string nodeText,string nodeNo,string nodeID,int imgIndex,int selectImgIndex,string nodeType,bool chk)
  {
   TreeNode newNode=new TreeNode(nodeText,imgIndex,selectImgIndex);
   //设置checked属性
   newNode.Checked=chk;
   newNode.Tag=new string[]{nodeType,nodeNo,nodeID};
   return newNode;
  }
  #endregion

  #region 递归函数,添加其子节点
  //递归函数,添加其子节点
  /**
   名称: AddChildNode
   功能:
     递归函数,添加其子节点
   参数:
     parentRow 父行
     parentNode 要添加子节点的节点
   返回值: 无                          
  **/

  /// <summary>
  /// 递归函数,添加其子节点
  /// </summary>
  /// <param name="parentNode">父节点</param>
  /// <param name="parentRow">相关的数据行集合的父行</param>
  /// <returns>返回创建的节点</returns>
  private TreeNode AddChildNode(TreeNode parentNode,DataRow parentRow)
  {
   DataRow childRows = parentRow;
   //假如有下级模块,添加下级模块信息
   bool chk = bool.Parse(childRows["FAuFlag"].ToString()) ;
   TreeNode newNode=CreateNode(childRows["FName"].ToString(),childRows["FLinkID"].ToString(),childRows["FModOrFuncID"].ToString(),childRows["FType"].ToString()=="Func"?1:0,childRows["FType"].ToString()=="Func"?1:0,childRows["FType"].ToString(),chk);
   parentNode.Nodes.Add(newNode); 
   return newNode;
  }
  #endregion

  private void UserPowerView_Load(object sender, System.EventArgs e)
  {
   //设置连接字符串
   userAdmin.SetConnectionString();
   DataSet ds=null;
   if(PostPower.GetAuType == "岗位")
   {
    this.Text = "授权->岗位";
    //获取岗位权限数据
    ds = BDEnterpriseObjects.bdPostInfo.GetPostModAndFuncAuInfo(PostPower.GetPostID);
    btOk.Enabled = PostPower.Getbtable;
   }
   else if(UserPower.GetAuType == "用户")
   {
    this.Text = "授权->用户";
    //获取用户权限数据
    ds = BDEnterpriseObjects.bdSysUser.GetEmpModAndFuncAuInfo(UserPower.GetLoginID);
    btOk.Enabled = UserPower.Getbtable;
   }
   int len = 2;
   //构建最上层根节点
   foreach(DataRow rw in ds.Tables[0].Rows)
   {
    string Key = rw["FKey"].ToString(); 
    if(Key.Length==len&&Key.Substring(0,len-2)=="")
    {
     TreeNode newNode = CreateNode(rw["FName"].ToString(),rw["FLinkID"].ToString(),rw["FModOrFuncID"].ToString(),0,0,rw["FType"].ToString(),bool.Parse(rw["FAuFlag"].ToString()));
     TreeModFunc.Nodes.Add(newNode);
     RowSelect(newNode,len,rw,Key,ds);
    }
   } 
  }

  #region 可以删除得到模块或功能ID
  /// <summary>
  /// 得到模块或功能ID
  /// </summary>
  /// <param name="withNodes">TreeNode对象的集合</param>
  /// <param name="chkIDstr">节点ID</param>
  /// <param name="chkTypeStr">节点类型</param>
  /// <param name="i">index 点的索引[返回节点的总数] </param>
  private void ChkNode(TreeNodeCollection withNodes,string chkIDstr,string chkTypeStr,string chkFlink,ref int i)
  {
   //循环创建节点权限
   foreach(TreeNode lsNode in withNodes)
   {
    string[] nodeInfos=(string[])lsNode.Tag;
    if(lsNode.Checked)
    {
     chkIDstr =nodeInfos[2];
     chkFlink = nodeInfos[1];
     chkTypeStr = nodeInfos[0];
     i++;
    }
    //递归检查设置
    ChkNode(lsNode.Nodes,chkIDstr,chkTypeStr,chkFlink,ref i);
   }
  }
  #endregion

原创粉丝点击