treeview
指定了NavigateUrl属性后,SelectedNodeChanged事件不触发了,但是我又要实现“展开一个节点时,关闭同级节点”的功能,求正解啊!!! --------------------编程问答-------------------- 你要用SelectedNodeChanged事件实现“展开一个节点时,关闭同级节点”的功能,为什么还要指定NavigateUrl属性 --------------------编程问答-------------------- rootnode.NavigateUrl = ds.Tables[0].Rows[i]["MenuUrl"].ToString();我需要此属性去连接到页面地址啊 --------------------编程问答-------------------- 去掉tn.NavigateUrl 在selectednodechanged事件中
if(/*判断点中的是这个结点*/)
{
Response.Redirect("");
} --------------------编程问答-------------------- NavigateUrl属性放到TreeNode的Value中 --------------------编程问答-------------------- 不是很明白 --------------------编程问答-------------------- 你的意思是不是点击之后再给NavigateUrl赋值? --------------------编程问答-------------------- 只要设置你节点的
你的节点.SelectAction = TreeNodeSelectAction.SelectExpand; --------------------编程问答-------------------- selectednodechanged中通过value跳转
--------------------编程问答-------------------- /// <summary>
/// 绑定功能菜单
/// </summary>
void tvDataBind()
{
DataSet ds = mic.GetMenuList(RoleID);//获取菜单信息
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
string MenuID = ds.Tables[0].Rows[i]["MenuID"].ToString();
if (MenuID == "1000")
{
TreeNode rootnode = new TreeNode();
rootnode.Text = ds.Tables[0].Rows[i]["MenuText"].ToString();
rootnode.Value = ds.Tables[0].Rows[i]["MenuID"].ToString();
//rootnode.NavigateUrl = ds.Tables[0].Rows[i]["MenuUrl"].ToString();
tvMenu.Nodes.Add(rootnode);//生成根节点
GetChildNodes(rootnode, Convert.ToInt32(ds.Tables[0].Rows[i]["MenuChild"]));//获取第一个子节点
}
}
tvMenu.ExpandDepth = 1; //展开所有一级节点
}
protected void btnExit_Click(object sender, EventArgs e)
{
if (Request.Cookies["UserInfo"] != null)
{
HttpCookie myCookie = new HttpCookie("UserInfo");
myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);
}
Response.Write("<script>window.location = 'Default.aspx'</script>");
}
/// <summary>
/// 获取子目录
/// </summary>
/// <param name="rootnode">父目录节点</param>
/// <param name="CatalogChild">子目录编号</param>
void GetChildNodes(TreeNode ParentNode, int NodeChild)
{
DataTable drChildNodes = mic.GetMenuForID(NodeChild, RoleID).Tables[0];//获取节点信息
if (drChildNodes.Rows.Count > 0)
{
if (drChildNodes.Rows[0]["MenuCheck"].ToString() == "1")
{
TreeNode tnChild = new TreeNode();
tnChild.Text = drChildNodes.Rows[0]["MenuText"].ToString();
tnChild.Value = drChildNodes.Rows[0]["MenuID"].ToString();
if (drChildNodes.Rows[0]["MenuUrl"].ToString() == "#")
{
//tnChild.SelectAction = TreeNodeSelectAction.Expand;
}
else
{
//tnChild.NavigateUrl = drChildNodes.Rows[0]["MenuUrl"].ToString();
}
ParentNode.ChildNodes.Add(tnChild);
int ChildNode = Convert.ToInt32(drChildNodes.Rows[0]["MenuChild"].ToString());//子节点值
if (ChildNode != 0)//是否还有子节点
{
GetChildNodes(tnChild, ChildNode);
}
}
int BrotherNode = Convert.ToInt32(drChildNodes.Rows[0]["MenuBrother"].ToString());//兄弟节点值
if (BrotherNode != 0)//是否还有兄弟节点
{
GetBrotherNodes(ParentNode, BrotherNode);
}
}
}
/// <summary>
/// 获取兄弟节点
/// </summary>
/// <param name="BrotherNode">父目录节点</param>
/// <param name="CatalogBrother">兄弟节点编号</param>
void GetBrotherNodes(TreeNode ParentNode, int NodeBrother)
{
DataTable dtBrotherNodes = mic.GetMenuForID(NodeBrother, RoleID).Tables[0]; //获取该节点信息
if (dtBrotherNodes.Rows.Count > 0)
{
//判断当前用户是否有权看到此节点
if (dtBrotherNodes.Rows[0]["MenuCheck"].ToString() == "1")
{
TreeNode tnBrother = new TreeNode();
tnBrother.Text = dtBrotherNodes.Rows[0]["MenuText"].ToString();
tnBrother.Value = dtBrotherNodes.Rows[0]["MenuID"].ToString();
if (dtBrotherNodes.Rows[0]["MenuUrl"].ToString() == "#")
{
//tnBrother.SelectAction = TreeNodeSelectAction.Expand;
}
else
{
//tnBrother.NavigateUrl = dtBrotherNodes.Rows[0]["MenuUrl"].ToString();
}
ParentNode.ChildNodes.Add(tnBrother);//添加到父节点下
int ChildNode = Convert.ToInt32(dtBrotherNodes.Rows[0]["MenuChild"].ToString());//子节点值
if (ChildNode != 0)//是否还有子节点
{
GetChildNodes(tnBrother, ChildNode);
}
}
int BrotherNode = Convert.ToInt32(dtBrotherNodes.Rows[0]["MenuBrother"].ToString());//兄弟节点值
if (BrotherNode != 0)//是否有兄弟节点
{
GetBrotherNodes(ParentNode, BrotherNode);
}
}
}
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;
}
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;
}
} --------------------编程问答-------------------- 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;
}
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;
}
}
我写这之后发现根本没达到我想要的啊,我的菜单一共五层,我发现点击第一层根本也不进时间,点最后一层才进 --------------------编程问答--------------------
补充:.NET技术 , ASP.NET