如何在窗体初始化的时候就展开所有TreeView控件的所有节点
5个回答
推荐于2016-03-01 · 知道合伙人互联网行家
关注
展开全部
利用递归关键的是找出要删除节点的父节点(假如是C),找到父节点C之后继续利用递归找出C的父节点B,找到父节点B之后继续找出B的父节点A.... .... 还需要加一个判断,判断一下 父节点.Parent.Parent 看部分代码:
string parentName="";
private void 删除选中节点ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
TreeNode node = treeView1.SelectedNode.Parent;
if (ChuLi.deleteNode(NodeId))//这个是我自己定义的方法,大家可以忽略
{
if (node != null)//如果是子节点不是根节点,那么就展开
{
parentName = node.Text;
//展开的应该是父节点
ExpandNodes(treeView1.Nodes);//调用-----------------------------------------
}
}
else
{
MessageBox.Show("删除失败!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//遍历所有节点,找出指定节点
private void ExpandNodes(TreeNodeCollection tnodes)
{
foreach (TreeNode node in tnodes)
{
if (node.Text == parentname)//比较判断,所以需要知道所选节点的父节点名字:node.Parent.Text
{
ExpandParentNodes(node.Parent.Nodes);//调用下一个递归方法
}
ExpandNodes(node.Nodes);
}
}
//关键点所在
private void ExpandParentNodes(TreeNodeCollection tnodes)
{
TreeNode parentNode;
foreach (TreeNode node in tnodes)
{
parentNode = node;
if (parentNode.Parent != null)
{
parentNode.Parent.Expand();
if (parentNode.Parent.Parent != null)//判断父节点的父节点是否为空,如果已经达到根节点就是null
{
ExpandParentNodes(parentNode.Parent.Parent.Nodes);
}
else
break;//已经达到根节点,退出
}
}
}
string parentName="";
private void 删除选中节点ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
TreeNode node = treeView1.SelectedNode.Parent;
if (ChuLi.deleteNode(NodeId))//这个是我自己定义的方法,大家可以忽略
{
if (node != null)//如果是子节点不是根节点,那么就展开
{
parentName = node.Text;
//展开的应该是父节点
ExpandNodes(treeView1.Nodes);//调用-----------------------------------------
}
}
else
{
MessageBox.Show("删除失败!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//遍历所有节点,找出指定节点
private void ExpandNodes(TreeNodeCollection tnodes)
{
foreach (TreeNode node in tnodes)
{
if (node.Text == parentname)//比较判断,所以需要知道所选节点的父节点名字:node.Parent.Text
{
ExpandParentNodes(node.Parent.Nodes);//调用下一个递归方法
}
ExpandNodes(node.Nodes);
}
}
//关键点所在
private void ExpandParentNodes(TreeNodeCollection tnodes)
{
TreeNode parentNode;
foreach (TreeNode node in tnodes)
{
parentNode = node;
if (parentNode.Parent != null)
{
parentNode.Parent.Expand();
if (parentNode.Parent.Parent != null)//判断父节点的父节点是否为空,如果已经达到根节点就是null
{
ExpandParentNodes(parentNode.Parent.Parent.Nodes);
}
else
break;//已经达到根节点,退出
}
}
}
2011-05-05
展开全部
我倒是有代码,就怕你看不明白,思路是加check 然后用js来写!给你粘上代码,看不懂的问我!
public class ChosePermission : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView2;
protected System.Web.UI.HtmlControls.HtmlInputHidden checkedNodes;
protected System.Web.UI.WebControls.Button Bt_Save;
AccessMethod amd=new AccessMethod();
private void Page_Load(object sender, System.EventArgs e)
{
TreeView2.Attributes.Add("oncheck","tree_oncheck(this)");
if (!Page.IsPostBack)
{
BindTree(TreeView2);
}
for (int i=0;i<TreeView2.Nodes[0].Nodes.Count;i++)
{
if(TreeView2.Nodes[0].Nodes[i].Checked)
{
for (int j=0;j<TreeView2.Nodes[0].Nodes[i].Nodes.Count;j++)
{
TreeView2.Nodes[0].Nodes[i].Nodes[j].Checked=true;
}
}
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Bt_Save.Click += new System.EventHandler(this.Bt_Save_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/// <summary>
/// 绑定树的数据
/// </summary>
/// <param name="treeView"></param>
public void BindTree(Microsoft.Web.UI.WebControls.TreeView treeView)
{
treeView.Nodes.Clear(); // 清空树
TreeNode rootnode = new TreeNode();
rootnode.Text = "权限选择"; // 给节点绑定显示值
rootnode.NodeData = "0"; // 给节点绑定key值
rootnode.Expanded = false; // 默认根结点为展开
rootnode.CheckBox=true;
rootnode.Target = "MainFrame";
treeView.Nodes.Add(rootnode);
CreateRootNode(rootnode);
}
/// <summary>
/// 创建根节点
/// </summary>
/// <param name="parentnode"></param>
public void CreateRootNode(TreeNode parentnode)
{
string sqlString="select * from T_UserGroup";
DataTable dataTable=new DataTable();
dataTable=amd.DatabaseDataTable(sqlString);
foreach(DataRow row in dataTable.Rows)
{
TreeNode tempnode = new TreeNode();
tempnode.Text = row["usergroup_name"].ToString();
tempnode.NodeData = row["usergroup_id"].ToString();
tempnode.CheckBox=true;
tempnode.Expanded = false;
//tempnode.NavigateUrl = row["Url"].ToString();
tempnode.Target = "MainFrame";
parentnode.Nodes.Add(tempnode);
CreateChildNode(tempnode);
}
}
/// <summary>
/// 创建孩子节点
/// </summary>
/// <param name="parentnode"></param>
public void CreateChildNode(TreeNode parentnode)
{
string sqlString="select user_id,user_name from T_User where usergroup_id=" + parentnode.NodeData ;
DataTable dataTable=new DataTable();
dataTable=amd.DatabaseDataTable(sqlString);
foreach(DataRow row in dataTable.Rows)
{
TreeNode tempnode = new TreeNode();
tempnode.Text = row["user_name"].ToString();
tempnode.NodeData = row["user_id"].ToString();
tempnode.CheckBox=true;
tempnode.Expanded = false;
//tempnode.NavigateUrl = row["Url"].ToString();
tempnode.Target = "MainFrame";
parentnode.Nodes.Add(tempnode);
//CreateChildNode(tempnode,dataTable);
}
}
private void Bt_Save_Click(object sender, System.EventArgs e)
{
string savaId=this.checkedNodes.Value.ToString();
}
}
js:
<script language="javascript">
//初始化选中节点
function initchecknode()
{
//获得需要初始化选择状态的节点的字符串.
var selectedNodes = document.all.checkedNodes.value;
var arrayNodes = new Array();
arrayNodes = selectedNodes.split(",");
var AllRootNode=new Array();
AllRootNode=document.getElementById("TreeView2").getChildren();
//初始化选择的节点
findAndCheckedNodes(AllRootNode,arrayNodes);
}
//根据已选择的节点的字符串初始化选择的节点
function findAndCheckedNodes(NodeArray,nodeDatas)
{
//alert(NodeArray.length);
if(parseInt(NodeArray.length)==0)
{
return;
}
else
{
for(var i=0;i<parseInt(NodeArray.length);i++)
{
var cNode,nodeData;
cNode=NodeArray[i];
////如果该节点在nodeDatas里则初始化checked = true;
nodeData = cNode.getAttribute("NodeData");
for(var j=0;j<nodeDatas.length;j++)
{
if(nodeDatas[j] == nodeData)
{
cNode.setAttribute("checked","true");
break;
}
}
//如果有子节点,则继续递归
if(parseInt(cNode.getChildren().length)!=0)
findAndCheckedNodes(cNode.getChildren(),nodeDatas);
}
}
}
//节点的oncheck事件
function tree_oncheck(tree)
{
var node=tree.getTreeNode(tree.clickedNodeIndex);
var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
setcheck(node,Pchecked);
document.all.checkedNodes.value="";
document.all.unchecked.value="";
FindCheckedFromNode(TreeView2);
}
//设置子节点选中
function setcheck(node,Pc)
{
var i;
var ChildNode=new Array();
ChildNode=node.getChildren();
if(parseInt(ChildNode.length)==0)
return;
else
{
for(i=0;i<ChildNode.length;i++)
{
var cNode;
cNode=ChildNode[i];
if(parseInt(cNode.getChildren().length)!=0)
setcheck(cNode,Pc);
cNode.setAttribute("checked",Pc);
}
}
}
//获取所有节点状态
function FindCheckedFromNode(node)
{
var i = 0;
var nodes = new Array();
nodes = node.getChildren();
for (i = 0; i < nodes.length; i++)
{
var cNode;
cNode=nodes[i];
if (cNode.getAttribute("checked"))
AddChecked(cNode);
else
AddUnChecked(cNode);
if (parseInt(cNode.getChildren().length) != 0 )
{
FindCheckedFromNode(cNode);
}
}
}
//添加选中节点
function AddChecked(node)
{
document.all.checkedNodes.value += node.getAttribute("NodeData");
document.all.checkedNodes.value += ',';
}
//添加未选中节点
function AddUnChecked(node)
{
document.all.unchecked.value += node.getAttribute("NodeData");
document.all.unchecked.value += ',';
}
</script>
另外,站长团上有产品团购,便宜有保证
public class ChosePermission : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView2;
protected System.Web.UI.HtmlControls.HtmlInputHidden checkedNodes;
protected System.Web.UI.WebControls.Button Bt_Save;
AccessMethod amd=new AccessMethod();
private void Page_Load(object sender, System.EventArgs e)
{
TreeView2.Attributes.Add("oncheck","tree_oncheck(this)");
if (!Page.IsPostBack)
{
BindTree(TreeView2);
}
for (int i=0;i<TreeView2.Nodes[0].Nodes.Count;i++)
{
if(TreeView2.Nodes[0].Nodes[i].Checked)
{
for (int j=0;j<TreeView2.Nodes[0].Nodes[i].Nodes.Count;j++)
{
TreeView2.Nodes[0].Nodes[i].Nodes[j].Checked=true;
}
}
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Bt_Save.Click += new System.EventHandler(this.Bt_Save_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/// <summary>
/// 绑定树的数据
/// </summary>
/// <param name="treeView"></param>
public void BindTree(Microsoft.Web.UI.WebControls.TreeView treeView)
{
treeView.Nodes.Clear(); // 清空树
TreeNode rootnode = new TreeNode();
rootnode.Text = "权限选择"; // 给节点绑定显示值
rootnode.NodeData = "0"; // 给节点绑定key值
rootnode.Expanded = false; // 默认根结点为展开
rootnode.CheckBox=true;
rootnode.Target = "MainFrame";
treeView.Nodes.Add(rootnode);
CreateRootNode(rootnode);
}
/// <summary>
/// 创建根节点
/// </summary>
/// <param name="parentnode"></param>
public void CreateRootNode(TreeNode parentnode)
{
string sqlString="select * from T_UserGroup";
DataTable dataTable=new DataTable();
dataTable=amd.DatabaseDataTable(sqlString);
foreach(DataRow row in dataTable.Rows)
{
TreeNode tempnode = new TreeNode();
tempnode.Text = row["usergroup_name"].ToString();
tempnode.NodeData = row["usergroup_id"].ToString();
tempnode.CheckBox=true;
tempnode.Expanded = false;
//tempnode.NavigateUrl = row["Url"].ToString();
tempnode.Target = "MainFrame";
parentnode.Nodes.Add(tempnode);
CreateChildNode(tempnode);
}
}
/// <summary>
/// 创建孩子节点
/// </summary>
/// <param name="parentnode"></param>
public void CreateChildNode(TreeNode parentnode)
{
string sqlString="select user_id,user_name from T_User where usergroup_id=" + parentnode.NodeData ;
DataTable dataTable=new DataTable();
dataTable=amd.DatabaseDataTable(sqlString);
foreach(DataRow row in dataTable.Rows)
{
TreeNode tempnode = new TreeNode();
tempnode.Text = row["user_name"].ToString();
tempnode.NodeData = row["user_id"].ToString();
tempnode.CheckBox=true;
tempnode.Expanded = false;
//tempnode.NavigateUrl = row["Url"].ToString();
tempnode.Target = "MainFrame";
parentnode.Nodes.Add(tempnode);
//CreateChildNode(tempnode,dataTable);
}
}
private void Bt_Save_Click(object sender, System.EventArgs e)
{
string savaId=this.checkedNodes.Value.ToString();
}
}
js:
<script language="javascript">
//初始化选中节点
function initchecknode()
{
//获得需要初始化选择状态的节点的字符串.
var selectedNodes = document.all.checkedNodes.value;
var arrayNodes = new Array();
arrayNodes = selectedNodes.split(",");
var AllRootNode=new Array();
AllRootNode=document.getElementById("TreeView2").getChildren();
//初始化选择的节点
findAndCheckedNodes(AllRootNode,arrayNodes);
}
//根据已选择的节点的字符串初始化选择的节点
function findAndCheckedNodes(NodeArray,nodeDatas)
{
//alert(NodeArray.length);
if(parseInt(NodeArray.length)==0)
{
return;
}
else
{
for(var i=0;i<parseInt(NodeArray.length);i++)
{
var cNode,nodeData;
cNode=NodeArray[i];
////如果该节点在nodeDatas里则初始化checked = true;
nodeData = cNode.getAttribute("NodeData");
for(var j=0;j<nodeDatas.length;j++)
{
if(nodeDatas[j] == nodeData)
{
cNode.setAttribute("checked","true");
break;
}
}
//如果有子节点,则继续递归
if(parseInt(cNode.getChildren().length)!=0)
findAndCheckedNodes(cNode.getChildren(),nodeDatas);
}
}
}
//节点的oncheck事件
function tree_oncheck(tree)
{
var node=tree.getTreeNode(tree.clickedNodeIndex);
var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
setcheck(node,Pchecked);
document.all.checkedNodes.value="";
document.all.unchecked.value="";
FindCheckedFromNode(TreeView2);
}
//设置子节点选中
function setcheck(node,Pc)
{
var i;
var ChildNode=new Array();
ChildNode=node.getChildren();
if(parseInt(ChildNode.length)==0)
return;
else
{
for(i=0;i<ChildNode.length;i++)
{
var cNode;
cNode=ChildNode[i];
if(parseInt(cNode.getChildren().length)!=0)
setcheck(cNode,Pc);
cNode.setAttribute("checked",Pc);
}
}
}
//获取所有节点状态
function FindCheckedFromNode(node)
{
var i = 0;
var nodes = new Array();
nodes = node.getChildren();
for (i = 0; i < nodes.length; i++)
{
var cNode;
cNode=nodes[i];
if (cNode.getAttribute("checked"))
AddChecked(cNode);
else
AddUnChecked(cNode);
if (parseInt(cNode.getChildren().length) != 0 )
{
FindCheckedFromNode(cNode);
}
}
}
//添加选中节点
function AddChecked(node)
{
document.all.checkedNodes.value += node.getAttribute("NodeData");
document.all.checkedNodes.value += ',';
}
//添加未选中节点
function AddUnChecked(node)
{
document.all.unchecked.value += node.getAttribute("NodeData");
document.all.unchecked.value += ',';
}
</script>
另外,站长团上有产品团购,便宜有保证
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
treeView1.ExpandAll();
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以加个:
treeview(控件名)点expendAll();
treeview(控件名)点expendAll();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
treeView1.ExpandAll();就行了,希望能帮到你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询