畫面:
<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();
}
}
}