画面:
<asp:HiddenField ID="hfdXuHao" runat="server" />
<asp:TreeView ID="tvMenu" runat="server" CssClass="tvStyle" EnableClientScript="false"
OnSelectedNodeChanged="tvMenu_SelectedNodeChanged"
ImageSet="Custom" OnTreeNodeExpanded="tvMenu_TreeNodeExpanded">
</asp:TreeView>
初始化:
protected void Page_Load(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(this.hfdXuHao.Value.ToString()))
{
this.hfdXuHao.Value = (string)Request["moduleid"]; //存储当前页面id
}
//清除树的所有节点
tvMenu.Nodes.Clear();
//重新组织生成树
this.InitTree(tvMenu.Nodes, "0", "",userid);
for (int i = 0; i < this.tvMenu.Nodes.Count; i++)
{
for (int j = 0; j < this.tvMenu.Nodes[i].ChildNodes.Count; j++)
{
if (this.hfdXuHao.Value == this.tvMenu.Nodes[i].ChildNodes[j].Value)
{
this.tvMenu.Nodes[i].Expanded = true;
}
}
}
}
protected void InitTree(TreeNodeCollection Nds, string parentId,string parentNm)//用递归方法动态生成节点
{
TreeNode tmpNode;
//数据库取得菜单内容
IList<SqlDABBmodulinfo> groupList = BLLModule.GetModuleList(parentId);
foreach (SqlDABBmodulinfodrv in groupList)
{
tmpNode = new TreeNode();
tmpNode.Value = drv.ModuleId.ToString();
tmpNode.Text = drv.ModuleName;
tmpNode.ToolTip = drv.Url;
if (!"0".Equals(drv.ParentId))
{
tmpNode.NavigateUrl = drv.Url + "?moduleid=" + drv.ModuleId.ToString();//设置超链接
}
Nds.Add(tmpNode);
this.InitTree(tmpNode.ChildNodes, drv.ModuleId,drv.ModuleName);
}
}
protected void tvMenu_SelectedNodeChanged(object sender, EventArgs e)
{
for (int i = 0; i < this.tvMenu.Nodes.Count; i++)
{//跌迭根节点
if (this.tvMenu .SelectedValue==this.tvMenu .Nodes [i].Value )
{//如果选中的是根节点,就展开
this.tvMenu.SelectedNode.Expanded = true;
}
else
{
if (this.tvMenu.SelectedNode.Parent != null)
{
//如果选中的不是根节点
for (int j = 0; j < this.tvMenu.SelectedNode.Parent.ChildNodes.Count; j++)
{//就让选中节点的所有同级节点收缩
this.tvMenu.SelectedNode.Parent.ChildNodes[j].CollapseAll();
}
//然后再展开选中的节点及其所有父节点
this.tvMenu.SelectedNode.Parent.Expanded = true;
this.tvMenu.SelectedNode.Expanded = true;
}
}
}
}//end tvMenu_SelectedNodeChanged
protected void tvMenu_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
{
TreeNodeCollection ts = null;
if (e.Node.Parent == null)
{
ts = ((TreeView)sender).Nodes;
}
else
ts = e.Node.Parent.ChildNodes;
foreach (TreeNode node in ts)
{
if (node != e.Node)
{
node.Collapse();
}
}
}