下图中,当选中一个节点“红宝石书城”后,第三个标签框内显示的内容是:this.Label3.Text = TreeView1.SelectedNode.ValuePath; 即 东建集团公司/101/101.01/101.01.03 ,但我想获取的内容是“东建集团公司/房屋开发公司/东方广场/红宝石书城”,但不知如何写代码,请大家支招,谢谢!
[此贴子已经被作者于2006-9-11 15:54:16编辑过]
[此贴子已经被作者于2006-9-11 15:54:16编辑过]
用 FullPath 出错,请斑竹指教,谢谢!我用的是C#
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
this.Label1.Text = TreeView1.SelectedNode.Text;
this.Label2.Text = Convert.ToString(TreeView1.SelectedNode.Depth);
//this.Label3.Text = TreeView1.SelectedNode.ValuePath;
this.Label3.Text = TreeView1.SelectedNode.FullPath;
this.Label4.Text = TreeView1.SelectedNode.Value;
//创建一个连接
SqlConnection conn2 = new SqlConnection("data source=(local);database=aaa;user=sa; password=8888");
//创建一个DataSet(数据集)
DataSet ds2 = new DataSet();
//创建一个DataAdapter
SqlDataAdapter da2 = new SqlDataAdapter("select * from subject where CLASS=2 and left(SUB_ID,3)=101", conn2);
//填充DataSet ds
da2.Fill(ds2, "subject");
////显示,绑定
//dg.DataSource = ds;
//dg.DataMember = "subject";
//dg.DataBind();
}
this.Label3.Text = TreeView1.SelectedNode.FullPath;
出错:错误 2 “System.Web.UI.WebControls.TreeNode”并不包含“FullPath”的定义
用递归也不行,请大家支招,谢谢!
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
string nText = TreeView1.SelectedNode.Text;
TreeNode tn = TreeView1.SelectedNode;
this.Label3.Text = GetPath(nText, tn);
this.Label1.Text = TreeView1.SelectedNode.Text;
this.Label2.Text = Convert.ToString(TreeView1.SelectedNode.Depth);
//this.Label3.Text = TreeView1.SelectedNode.ValuePath;
//this.Label3.Text = TreeView1.SelectedNode.ValuePath;
this.Label4.Text = TreeView1.SelectedNode.Value;
//创建一个连接
SqlConnection conn2 = new SqlConnection("data source=(local);database=aaa;user=sa; password=8888");
//创建一个DataSet(数据集)
DataSet ds2 = new DataSet();
//创建一个DataAdapter
SqlDataAdapter da2 = new SqlDataAdapter("select * from subject where CLASS=2 and left(SUB_ID,3)=101", conn2);
//填充DataSet ds
da2.Fill(ds2, "subject");
////显示,绑定
//dg.DataSource = ds;
//dg.DataMember = "subject";
//dg.DataBind();
}
protected string GetPath(string lText ,TreeNode tn)
{
if (tn.Text != "东建集团公司")
{
lText += "/"+ TreeView1.SelectedNode.Parent.Text;
GetPath(lText, TreeView1.SelectedNode.Parent);
}
return lText;
}
昨天晚上我认真研究了 flyin2006 提供的代码,发现出现无限循环或无限递归的错误的原因可能是:无法返到当前选定节点的父节点的再上一级或上几级的父节点。我试着将 GetPath(lText,TreeView.SelectedNode.Parent) 改成了 GetPath(lText, tn.Parent); 就解决了出现无限循环或无限递归的错误。
但是,仍然无法得到 this.Label3.Text=“**集团公司/房屋开发公司/东方广场/红宝石书城”。经逐语句,当执行到 return lText; 时, 变量 lText 的值是 “**集团公司/房屋开发公司/东方广场/红宝石书城”,但 执行 return lText; 之后,变量 lText 的值变成了 “东方广场/红宝石书城”。当第一次执行完 return lText; 之后,跳到 GetPath(lText, tn.Parent); ,执行完 GetPath(lText, tn.Parent); 后,跳到 return lText;,如此反复两次。
请大家帮忙解决这个问题,谢谢大家!
this.Label3.Text = GetPath(TreeView1.SelectedNode.Text, TreeView1.SelectedNode);
protected string GetPath(string lText, TreeNode tn)
{
if (tn.Text != "东建集团公司")
{
lText = tn.Parent.Text + "/" + lText;
GetPath(lText, tn.Parent);
}
return lText;
}