假设有一个这样的树-根节点
-子节点
-孙节点
-重孙节点
-......假设我现在点击"重孙节点",我点击一个按钮。假设由一个ListBox控件显示:重孙节点
孙节点+重孙节点
子节点+孙节点+重孙节点
根节点+子节点+孙节点+重孙节点===============================================================================假设选择"孙节点",点击按钮。ListBox显示孙节点
子节点 + 孙节点
根节点 + 子节点 + 孙节点===================================================================================也就是说我选择一个节点后,怎样显示一共N条记录(N是当前选择的节点到根节点的层次)
第一条记录显示当前选择节点的名称,
第二条记录显示当前选择节点名称+选择节点的父节点名称
第三条记录显示当前选择节点名称+选择节点的父节点名称+选择节点的父节点的父节点的名称
......
直到根结点。不一定非要显示在ListBox中,只是求一个方法。谢谢大家
-子节点
-孙节点
-重孙节点
-......假设我现在点击"重孙节点",我点击一个按钮。假设由一个ListBox控件显示:重孙节点
孙节点+重孙节点
子节点+孙节点+重孙节点
根节点+子节点+孙节点+重孙节点===============================================================================假设选择"孙节点",点击按钮。ListBox显示孙节点
子节点 + 孙节点
根节点 + 子节点 + 孙节点===================================================================================也就是说我选择一个节点后,怎样显示一共N条记录(N是当前选择的节点到根节点的层次)
第一条记录显示当前选择节点的名称,
第二条记录显示当前选择节点名称+选择节点的父节点名称
第三条记录显示当前选择节点名称+选择节点的父节点名称+选择节点的父节点的父节点的名称
......
直到根结点。不一定非要显示在ListBox中,只是求一个方法。谢谢大家
解决方案 »
- C# 内存映射文件第二次MapViewOfFile时就出错
- 用oledbdataadapter更新access 德国跟中国的小数点问题
- 关于数据交换 数据同步 有详细说明
- Process的问题
- 本人出学C#,求指导师傅一名!急
- 激活Winform窗体
- [菜鸟问题]C#窗口切换时如何关闭原来窗口!!
- 对一个m*n的数组,想将里面的每一个元素都赋为同一个值,怎样最快?
- 初学者:提问 文件写入数据库的问题?为什么写入后的字段大小和文本内容大小不一样?--急,在线等待
- C#.net如何在DateGridView中显示SQL2010中表的前两列数据.求代码
- 对DLL的调用,如何把以下C代码在C#中实现?
- 问个弱智问题....
if(sn==null)return;while((sn!=null)&&(sn.parent!=null))
{
showmessage(sn.text);
sn=sn.parent;
}//显示当前结点的子结点时,可能有多可,写一foreach可以搞定;
{
if (IsPostBack == false)
{
PopulateRootLevel();//调用方法动态生成树
} } //获取并绑定数据源
private void PopulateRootLevel()
{ SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString);
SqlCommand cmd = new SqlCommand(@"select Type.bT_ID,Type.bT_Name,count(distinct Left(book.book_ID,4)) 细类数目 from Type,Book where Left(book.book_ID,2)=Type.bT_ID group by Type.bT_ID ,Type.bT_Name", conn);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
ada.Fill(dt);
PopulateNodes(dt,TreeView1.Nodes);
}
//动态生成TreeView节点
private void PopulateNodes(DataTable dt, TreeNodeCollection nodes)
{
foreach(DataRow dr in dt.Rows)
{
TreeNode tn=new TreeNode();
tn.Text = dr["bT_Name"].ToString();
tn.Value = dr["bT_ID"].ToString();
nodes.Add(tn);
tn.PopulateOnDemand = ((int)(dr["细类数目"]) > 0);
}
}
//生成子节点方法
private void PopulateSubLevel(int parentid, TreeNode parentNode)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString);
SqlCommand cmd = new SqlCommand("BTID ", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameterBTID = new SqlParameter("@BTID",SqlDbType.Int);
parameterBTID.Value = parentid;
cmd.Parameters.Add(parameterBTID);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
ada.Fill(dt);
PopulateNodes(dt,parentNode.ChildNodes); }
//触发生成子节点事件
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
PopulateSubLevel(Int32.Parse(e.Node.Value), e.Node);
}
}
试试看,我不久前实现的。应该能满足你的要求吧
{
listBox1.Items.Clear();
if (treeView1.SelectedNode != null)
{
TreeNode _Node = treeView1.SelectedNode;
string _Text =_Node.Text;
while (_Node != null)
{
listBox1.Items.Add(_Text);
_Node = _Node.Parent;
if (_Node != null)
{
_Text = _Node.Text + "+" + _Text;
}
}
}
}循环的方法...
List<string> pathArray;
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
this.pathArray = new List<string>();
getPath(e.Node);
} void getPath(TreeNode node)
{
if (node == null)
return; if (this.pathArray.Count == 0)
this.pathArray.Add(node.Text);
else
this.pathArray.Add(this.pathArray[this.pathArray.Count - 1] + " - " + node.Text); getPath(node.Parent);
}
TreeNode tn=TreeView.SelectNode;
while(tn!=null)
{
li.Text+=item.Text;
li.Value="...";
lbx.Items.add(li)
tn=tn.parent;
}
{
treeView1.PathSeparator = "⊙";
string[] _Path = treeView1.SelectedNode.FullPath.Split('⊙'); for (int i = _Path.Length-1; i != -1; i--)
{
string _Value = "";
if (listBox1.Items.Count != 0) _Value=listBox1.Items[listBox1.Items.Count - 1].ToString();
listBox1.Items.Add(_Path[i]+"+"+_Value);
}
}或则用STRING切分来解决