当前位置:编程学习 > C#/ASP.NET >>

关于c# treeview控件 救救命吧!!万分感谢!!!

1. 窗口初始化时,载入TreeView中内容;
2. 点击TreeView中数据库名节点,输入新数据库名,点击更改按钮,更改数据库名称。
3. 点击TreeView中数据表名节点,输入新数据表名,点击更改按钮,更改数据表名称。
womozhongyi@126.com
  父节点名称“数据库名”它下面三个并列的子节点,名称都为“数据表明”。textBox1旁边跟botton1,botton1名称为更改。textBox2旁边跟botton2,botton2名称同样为更改。 --------------------编程问答-------------------- http://www.cnblogs.com/tenor/archive/2008/01/07/1029386.html --------------------编程问答-------------------- 2. 点击TreeView中数据库名节点,输入新数据库名,点击更改按钮,更改数据库名称。
你回一个其他的都会了 
写了一个

        private void Form1_Load(object sender, EventArgs e)
        {
            //csdn数据库树加载            
            tvDb.Nodes.Clear();
            tvDb.Nodes.Add("数据库");


            string connString = "Server=WWW-28E16B9FC9D;Database=master;Integrated Security=SSPI";

            string sqlString = "select * from dbo.sysdatabases";

            SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter(sqlString, connString);

            DataSet ds1 = new DataSet();
            sqlDataAdapter1.Fill(ds1);

            DataTable dt = ds1.Tables["Table"];
            foreach (DataRow dr in dt.Rows)
            {
                TreeNode tNode = new TreeNode(dr[0].ToString());
                tNode.Tag = tNode.Text.ToString();
                tvDb.Nodes[0].Nodes.Add(tNode);
            }
        }

        private void tvDb_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            tvDb.LabelEdit = true;
            e.Node.BeginEdit();
        }

        private void btnRefre_Click(object sender, EventArgs e)
        {
            foreach (TreeNode tNode in tvDb.Nodes[0].Nodes)
            {
                if (tNode.Text!=tNode.Tag.ToString())
                {
                    string connString = "Server=WWW-28E16B9FC9D;Database=" + tNode.Tag.ToString() + "; Integrated Security=SSPI";
                    string sqlString = "EXEC  sp_renamedb  '" + tNode.Tag.ToString() + "' ,  '" + tNode.Text.ToString() + "'";
                    SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter(sqlString, connString);

                    DataSet ds1 = new DataSet();
                    sqlDataAdapter1.Fill(ds1);
                }
            }
        }


--------------------编程问答--------------------  TreeView组件是由多个类来定义的,TreeView组件是由命名空间"System.Windows.Forms"中的"TreeView"类 来定义的,而其中的节点(即Node),是由命名空间"System.Windows.Forms"中的"TreeNode"来定义的。所以当在程序中创 建一个TreeView对象,其实只是创建了一个可以放置节点的"容器"。而在这个容器中加入一个节点,其实就是加入了从"TreeNode"类中创建的 一个节点对象;同样删除一个节点,也就是删除一个"TreeNode"节点对象。

一、C#操作TreeView组件中的一些常用方法以及具体实现:
     TreeView组件虽然是一个操作起来比较麻烦的组件,但归根到底,可以总结为三种基本操作:加入子节点、加入兄弟节点和删除节点。掌握了这三种常用操作,对于在编程中灵活运用TreeView组件是十分必要的。下面就分别来加以介绍。

(1).加入子节点:
所谓子节点,就是处于选定节点的下一级节点。加入子节点的具体过程是:首先要在TreeView组件中定位要加入的子节点的位置,然后创建一个节点对 象,然后利用TreeVeiw类中对节点的加入方法(即:Add ( )方法),加入此节点对象。下面就是在treeView1组件中加入一个子节点的具体代码:


//首先判断是否选定组件中的位置

if ( treeView1.SelectedNode == null )

{

MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

}

else

{

//创建一个节点对象,并初始化

TreeNode tmp ;

tmp = new TreeNode ( "节点名称" ) ;

//在TreeView组件中加入子节点

treeView1.SelectedNode.Nodes.Add ( tmp ) ;

treeView1.SelectedNode = tmp ;

treeView1.ExpandAll ( ) ;






(2).加入兄弟节点:

      所谓兄弟节点,就是在选定的节点的平级的节点。加入兄弟节点的方法和加入子节点的方法基本一致,只是在最后的实现方法上有着略微的区别。加入兄弟节点的 具体步骤,首先也是要确定要加入的兄弟节点所处的位置,接着定义一个节点对象,最后调用TreeView类中对兄弟节点加入的方法,加入此节点对象。加入 兄弟节点和加入子节点的最大区别就在于这最后一步。希望读者能够注意。下面是在TreeView组件加入一个兄弟节点的具体代码:


//首先判断是否选定组件中节点的位置

if ( treeView1.SelectedNode == null )

{

MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

}

else

{

//创建一个节点对象,并初始化

TreeNode tmp ;

tmp = new TreeNode ( textBox1.Text ) ;

//在TreeView组件中加入兄弟节点

treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;

treeView1.ExpandAll ( ) ;






(3).删除节点:
     删除节点就是删除TreeView组件中选定的节点,删除节点可以是子节点,也可以是兄弟节点,但无论节点的性质如何,必须保证要删除的节点没有下一级 节点,否则必须先删除此节点中的所有下一级节点,然后再删除此节点。删除节点比起上面的二个操作要显得略微简单,具体方法是:首先判断要删除的节点是否存 在下一级节点,如果不存在,就调用TreeView类中的Remove ( )方法,就可以删除节点了。下面是删除TreeView组件中节点的具体代码:



//判断选定的节点是否存在下一级节点

if ( treeView1.SelectedNode.Nodes.Count == 0 )

//删除节点

treeView1.SelectedNode.Remove ( ) ;

else

MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; 


(4).TreeView组件的一些其他常用操作:

其他的一些常用操作比起上面的三种操作,在具体实现上要显得简单许多。这些常用操作无非是,展开所有节点,展开指定的节点、和折叠所有节点。下面就来具体介绍一下:

< I > .展开所有节点:

要展开TreeView组件中的所有节点,首先就要把选定的节点指针定位在TreeView组件的根节点上,然后调用选定组件的ExpandAll方法就可以了,下面是具体代码:

//定位根节点

treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;

//展开组件中的所有节点

treeView1.SelectedNode.ExpandAll ( ) ;

< II > .展开选定节点的下一级节点:



由于只是展开下一级节点,所以就没有必要用ExpandAll ( )方法了。展开下一级节点只需要调用Expand ( )方法就可以了,下面是具体的实现代码:

treeView1.SelectedNode.Expand ( ) ;

< III > .折叠所有节点:

折叠所有节点和展开所有节点是一组互操作,具体实现的思路也大致相同,折叠所有节点也是首先要把选定的节点指针定位在根节点上,然后调用选定组件的Collapse ( )就可以了,下面是具体的实现代码:



//定位根节点

treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;

//折叠组件中所有节点

treeView1.SelectedNode.Collapse ( ) ; 


二、C#编写的一个完整操作TreeView组件的例子:
      下面是C#编写一个的关于TreeView组件的例子,在这个例子中,结合以上介绍的常用方法和一般方法,基本覆盖来TreeView组件的一些最常用 的操作。譬如可以灵活的程序中的TreeView组件中,进行加入子节点、兄弟节点、删除节点、折叠、展开等操作。其中前三种基本操作是通过程序中弹出菜 单中的功能来实现的,后面操作是通过程序中的按钮来实现的。下面是此程序的代码节略(TreeView.cs):


using System ;

using System.Drawing ;

using System.Collections ;

using System.ComponentModel ;

using System.Windows.Forms ;

using System.Data ;

namespace 全面掌握TreeView组件的使用方法

{

/// Form1 的摘要说明。

public class Form1 : Form

{

private TreeView treeView1 ;

private Button button1 ;

private Button button2 ;

private Button button3 ;

private MenuItem menuItem2 ;

private MenuItem menuItem3 ;

private MenuItem menuItem4 ;

private ContextMenu contextMenu1 ;

private TextBox textBox1 ;

private Label label1 ;

/// 必需的设计器变量。

private System.ComponentModel.Container components = null ;

public Form1 ( )

{

//初始化窗体中的组件

InitializeComponent ( ) ;

}

/// 清理所有正在使用的资源。

protected override void Dispose ( bool disposing )

{

if ( disposing )

{

if ( components != null )

{

components.Dispose ( ) ;

}

}

base.Dispose ( disposing ) ;

}

private void InitializeComponent ( )

{

//初始化代码(略)

}

[ STAThread ]

static void Main ( )

{

Application.Run ( new Form1 ( ) ) ;

}

private void AddChildNode ( )

{

//首先判断是否选定组件中的位置

if ( treeView1.SelectedNode == null )

{

MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

}

else

{

if ( textBox1.Text != "" )

{

//创建一个节点对象,并初始化

TreeNode tmp ;

tmp = new TreeNode ( textBox1.Text ) ;

//在TreeView组件中加入子节点

treeView1.SelectedNode.Nodes.Add ( tmp ) ;

treeView1.SelectedNode = tmp ;

treeView1.ExpandAll ( ) ;

}

else

{

MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

return ;

}

}

}

private void AddParent ( )

{

//首先判断是否选定组件中节点的位置

if ( treeView1.SelectedNode == null )

{

MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

}

else

{

if ( textBox1.Text != "" )

{

//创建一个节点对象,并初始化

TreeNode tmp ;

tmp = new TreeNode ( textBox1.Text ) ;

//在TreeView组件中加入兄弟节点

treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;

treeView1.ExpandAll ( ) ;

}

else

{

MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

return ;

}

}

TreeNode tnode = new TreeNode ( textBox1.Text ) ;

}

private void treeView1_MouseDown ( object sender , MouseEventArgs e )

{

if ( e.Button == MouseButtons.Right )

contextMenu1.Show ( this , new Point ( e.X , e.Y ) ) ;

}

private void button1_Click ( object sender , System.EventArgs e )

{

treeView1.SelectedNode.Expand ( ) ;

}

private void menuItem2_Click ( object sender , System.EventArgs e )

{

AddChildNode ( ) ;

}

private void menuItem3_Click ( object sender , System.EventArgs e )

{

AddParent ( ) ;

}

private void menuItem4_Click ( object sender , System.EventArgs e )

{

//判断选定的节点是否存在下一级节点

if ( treeView1.SelectedNode.Nodes.Count == 0 )

//删除节点

treeView1.SelectedNode.Remove ( ) ;

else

MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

}

private void button2_Click ( object sender , System.EventArgs e )

{

//定位根节点

treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;

//展开组件中的所有节点

treeView1.SelectedNode.ExpandAll ( ) ;

}

private void button3_Click ( object sender , System.EventArgs e )

{

//定位根节点

treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;

//折叠组件中所有节点

treeView1.SelectedNode.Collapse ( ) ;

}

}





三、如何获取 VS2005 中 TreeView树形结构控件 选定节点的“文本”路径
      获取TreeView树形结构   选定节点   的“文本”路径,作为文件的存放路径。但   TreeView.SelectedNode.ValuePath     只能获取   选定节点的“值路径”,不能获取TreeView树形结构   选定节点的“文本”路径。可以这样处理:(有点问题,可能死循环,有时间再改下)


 

TreeView_SelectedIndexChanged()   
  {   
  string   nText   =   TreeView.SeletedNode.Text;   
  TreeNode   tn   =   TreeView.SelectedNode;   
  this.Label3.Text   =   GetPath(nText,tn);   
  }   
  protected   string   GetPath(string   lText   ,TreeNode   tn)         
  {                   
                  if   (tn.Text   !=   "根接点")   
                  {   
                        lText   +=   "/"+   TreeView.SelectedNode.Parent.Text;   
                        GetPath(lText,TreeView.SelectedNode.Parent)   
                  }   
                  return   lText;   
  }   





--------------------编程问答-------------------- 感谢1楼给我的网址!!我现在的层次太低,还不能理解其深意!!!!万分感谢!!!!! --------------------编程问答-------------------- 感谢2楼给我的编码,里面是不是需要连接数据库啊????您给我写的也有点深了,不知能否给我留个邮箱,我给您题您再给我看一看,帮我写个简单点的!!!非常感谢!!! --------------------编程问答-------------------- 三楼您好,多谢您的支持,您给我的我在网上已经搜到了!!!!!! --------------------编程问答-------------------- 楼上很详细。
顶一下。
应该解决问题了吧。 --------------------编程问答--------------------
引用 5 楼 university323 的回复:
感谢2楼给我的编码,里面是不是需要连接数据库啊????您给我写的也有点深了,不知能否给我留个邮箱,我给您题您再给我看一看,帮我写个简单点的!!!非常感谢!!!

1553566280@qq.com --------------------编程问答-------------------- 感谢楼上 --------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,