#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