//用于缓存数据
private static Dictionary<string, IList<PW_Department>> nodeDictionary = new Dictionary<string, IList<PW_Department>>();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
nodeDictionary.Clear();
BindDepartmentTree(this.PwPid, "system");
}
}
//取得根目录的第一级数据
public void BindDepartmentTree(string pwPid, string departmentNo)
{
nodeDictionary.Clear();
UserPower userPower = new UserPower();
//取得根目录
PW_Department pwSystem = userPower.GetParentDepartment(pwPid, departmentNo);
tvDepartment.Nodes.Clear();
if (pwSystem == null)
{
return;
}
TreeNode tnRootNode = new TreeNode();
tnRootNode.Text = pwSystem.departmentName;
tnRootNode.Value = pwSystem.departmentNo;
//取得根目录的第一级数据
IList<PW_Department> ilPwDepts = userPower.GetChildDepartment(PwPid, departmentNo);
if (ilPwDepts == null || ilPwDepts.Count < 1)
{
return;
}
foreach (PW_Department pdItem in ilPwDepts)
{
TreeNode tnNewNode = new TreeNode(pdItem.departmentName, pdItem.departmentNo);
//取得第一级数据下的第二级数据
IList<PW_Department> ilChilldDepts = userPower.GetChildDepartment(PwPid, pdItem.departmentNo);
tnRootNode.ChildNodes.Add(tnNewNode);
if (ilChilldDepts == null || ilChilldDepts.Count < 1)
{
}
else
{
//设置父结点可以扩展
tnNewNode.PopulateOnDemand = true;
tnNewNode.Expanded = false;
nodeDictionary.Add(pdItem.departmentNo, ilChilldDepts);
}
}
tvDepartment.Nodes.Add(tnRootNode);
}
//TreeNodePopulate事件,用于分级取数据
protected void tvDepartment_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
//取得当前点击的node的值
if (tvDepartment.SelectedNode != null)
{
string sValue = tvDepartment.SelectedNode.Value;
}
UserPower userPower = new UserPower();
string nodeID = e.Node.Value;
if (nodeDictionary != null)
{
if (nodeDictionary.Keys.Contains(nodeID))
{
if (nodeDictionary[nodeID].Count>0)
{
//从缓存中取得当前结点的第一级结点
foreach (PW_Department pdItem in nodeDictionary[nodeID])
{
TreeNode tnNewNode = new TreeNode(pdItem.departmentName, pdItem.departmentNo);
//取得当前结点第一级结点下的子结点
IList<PW_Department> ilPwDepts = userPower.GetChildDepartment(PwPid, tnNewNode.Value);
//如果没有子结点,不可以扩展
if (ilPwDepts == null || ilPwDepts.Count < 1)
{
tnNewNode.Expanded = false;
tnNewNode.PopulateOnDemand = false;
tnNewNode.SelectAction = TreeNodeSelectAction.Select;
e.Node.ChildNodes.Add(tnNewNode);
}
else
{
//设置父结点可以扩展
tnNewNode.PopulateOnDemand = true;
tnNewNode.Expanded = false;
tnNewNode.SelectAction = TreeNodeSelectAction.Select;
e.Node.ChildNodes.Add(tnNewNode);
//级存当前结点第一级结点下的子结点
nodeDictionary.Add(pdItem.departmentNo, ilPwDepts);
}
}
//移除已展开的节点
nodeDictionary.Remove(nodeID);
}
}
}
}