http://expert.csdn.net/Expert/topic/1525/1525202.xml?temp=.5075495

解决方案 »

  1.   

    myDataSet.Tables("treetable")没填充数据.
      

  2.   

    Dim myDataSet As New DataSet
            myAdapter.Fill(myDataSet, "treetable")
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
           Dim myDataSet As New DataSet
            myAdapter.Fill(myDataSet, "treetable")
            inittree(myDataSet.Tables("treetable"),TreeView1.Nodes, 999)
        End Sub
    Private Sub inittree(ByRef tb As datatable,ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal Parentid As Integer)
            Dim dv As New DataView
            Dim dvrow As DataRowView
            Dim tmpNode As New Microsoft.Web.UI.WebControls.TreeNode
            Dim intid As Integer
            dv.Table = tb
            dv.RowFilter = "Parentid = " & Parentid & ""
            For Each dvrow In dv            tmpNode.ID = dvrow("Nodeid")
                tmpNode.Text = dvrow("Nodename")
                'tmpNode.NavigateUrl = dvrow("Address")
                intid = dvrow("Parentid")
                Nds.Add(tmpNode)
                inittree(tb,Nds(Nds.Count - 1).Nodes, intid)
            Next
        End Sub
      

  3.   

    1、用代码在treeview web控件中,添加node的方法表字段:编号,父编号,名称
    数据:
    1   0   中华人民共和国
    2   1   湖南
    3   1   湖北        void  creattree(string  text,TreeNode tnd,string  pid)
            {            TreeNode  t2=new  TreeNode();
                t2.Text=text;            tnd.Nodes.Add(t2);生成
                string str1 ="父编号 = '"+pid+"'";
                DataRow[] dryl = dataSet31.Tables [0].Select(str1);            for(int  i=0;i<=dryl.GetUpperBound(0);i++)
                {creattree(dryl[i][2].ToString(),t2,dryl[i][0].ToString());
                }
            }
    //
                TreeNode  t1=new  TreeNode();
                t1.Text="地区信息";
                TreeView2.Nodes.Add(t1);            creattree("中华人民共和国",t1,"1");
    2、如何为TreeView添加事件?Private Sub TreeView1_indexChanged(ByVal sender As Object, ByVal e As
    Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) Handles
    TreeView1.SelectedIndexChange
            Dim a As Integer
            a = TreeView1.SelectedNodeIndex
            TextBox1.Text = CStr(a)
    End Sub
    但是AutoPostBack设置为True的话,TreeView还要刷新,闪烁,我的TreeView比较庞大
    ,这可怎么办???苦恼中3、为什么TreeView 中的SelectedIndexChange为什么不执行???AutoPostBack属性为真,SelectedIndexChange才能被执行。
    不过这样的话你选择时会感到刷新得让你痛苦,根据你的具体实现的目的,采用变通的
    方法,尽量不使用SelectedIndexChange事件吧。
    selectedindexchange事件挂到控件上没有?
    InitializeComponent方法中检查检查4、如何判断 TreeView 的一个节点下是否有子节点???if(selNode.Nodes.Count==0){
      //该节点没有字节点
    }5、如何得到 TreeView 的当前选择节点???    1.Tree.GetNodeFromIndex(Tree.SelectedNodeIndex.ToString())
        2.private void TreeView1_SelectedIndexChange(object sender,
    Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
            e.NewNode即为所选节点6、treeview实现两层节点没问题,扩展到无限层就出问题了?我的那个做法还不够完善,对于节点数较少的情况可以这样做,对于节点数较多的情况
    ,你就不能这样做了,你应该只加载一级,当点击节点展开时,再加载它的下一级子节
    点。
    数据库结构如下:
    表名:Table1
    ParentID varchar 20:父节点
    ID varchar 20:节点
    Name varchar 50:名称来来来,这里给你个例程,再给个我的网页上的TreeViwe看看,一万个子节点都没问题

    http://dev1.eraserver.net/czc888/webform1.aspx
    至于那三个图象的意义你看我的网页就知道了。分别表示一页纸(没有子节点)、一本
    关闭的书(有子节点),一本打开的书(当前节点被展开)        void  creat_node(string
    name,Microsoft.Web.UI.WebControls.TreeNode  t1,string  number)
            {
                //定义一个新的结点            Microsoft.Web.UI.WebControls.TreeNode  t2=new
    Microsoft.Web.UI.WebControls.TreeNode();
                t2.ID=number;
                t2.Text=name;
                //判断是否为根结点
                TreeView1.ExpandedImageUrl="images/Depart03.bmp";
                if(t1.ID.Trim()=="###")
                {
                    TreeView1.Nodes.Add(t2);
                    t2.ImageUrl="images/Depart01.bmp";
                }
                else
                {
                    t1.Nodes.Add(t2);
                       t2.ImageUrl="images/Depart01.bmp";
                    t1.ImageUrl="images/Depart02.bmp";
                }
                //取得这个结点的所有子结点,利用递归自动生成
                string mySelectQuery = "SELECT ParentID, ID,Name FROM table1
    where  ParentID='" + number +"'";
                string MyConnString="provider=Microsoft.Jet.OLEDB.4.0;Data
    Source="+Server.MapPath(".")+"/dt/mydata.mdb";
                OleDbConnection myConnection = new
    OleDbConnection(MyConnString);
                OleDbCommand myCommand = new
    OleDbCommand(mySelectQuery,myConnection);
                myConnection.Open();
                OleDbDataReader myReader;
                myReader = myCommand.ExecuteReader();
                while (myReader.Read())
                {
                    creat_node(myReader.GetString(2),t2,myReader.GetString(1));            }
                myReader.Close();
                myConnection.Close();        }    private void CreateProviderTreeBtn_Click(object sender,
    System.EventArgs e)
            {
                Microsoft.Web.UI.WebControls.TreeNode  t1=new
    Microsoft.Web.UI.WebControls.TreeNode();
                creat_node("",t1,"###");7、怎样使用TreeView???//初始化TreeView数据
            private void InitTV(int intVOrderLen)
            {
                SqlDataReader dr;
                SqlCommand myCommand;
                string strSel = "select * from bas_enterprise where
    len(vieworder)="+intVOrderLen+" order by vieworder";
                myCommand = new SqlCommand (strSel, myConnection);
                dr=myCommand.ExecuteReader();
                while (dr.Read ())
                {
                    TreeNode pNode=new TreeNode ();
                    pNode.Text =dr["EntpName"].ToString ();
                    pNode.ID =dr["ViewOrder"].ToString ();
                    TreeView1.Nodes .Add (pNode);            }
                dr.Close ();        }
            private void TreeView1_SelectedIndexChange(object sender,
    Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
            {
                TreeNode NewNode=TreeView1.GetNodeFromIndex
    (TreeView1.SelectedNodeIndex);
                string strNodeId=NewNode.ID .ToString ();
                SqlDataReader dr;
                SqlCommand myCommand;
                int intVOrderLen=strNodeId.Length+2;
                string strSel = "select * from bas_enterprise where
    len(vieworder)="+intVOrderLen+" and vieworder like '%"+strNodeId+"__%'
    order by vieworder";
                myCommand = new SqlCommand (strSel, myConnection);
                dr=myCommand.ExecuteReader();
                NewNode.Nodes .Clear();
                while (dr.Read ())
                {
                    TreeNode pNode=new TreeNode ();
                    pNode.Text =dr["EntpName"].ToString ();
                    pNode.ID =dr["ViewOrder"].ToString ();
                    NewNode.Nodes.Add (pNode);
                }
                dr.Close ();
                TreeView1.ExpandLevel=1;
            }
    8、在treeview中如何查找一个值,并选中它?问题:
    各位,在已经建好的树中如何查找一个文本或者是treenodes的id,找到后选中它?答案:
    for(int i=0;i<TreeView1.Nodes.Count;i++)
        if(TreeView1.Nodes[i]==TextBox1.Text)
          {
            string index1=TreeView1.Nodes[i].GetNodeIndex();//取得index
            TreeView1.SelectedNodeIndex=index1;
       }9、如何取得TreeView中各项的值??        private  void  TreeView1_SelectedIndexChange(object  sender,
    Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs  e)
            {
                          Microsoft.Web.UI.WebControls.TreeNode
    NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);
                Label1.Text  =NewNo
      

  4.   

    Private Sub inittree(ByRef tb As datatable,ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal Parentid As Integer)
            Dim dv As New DataView
            Dim dvrow As DataRowView
            Dim tmpNode As New Microsoft.Web.UI.WebControls.TreeNode
            Dim intid As Integer
            dv.Table = tb
            dv.RowFilter = "Parentid = " & Parentid & ""
            For Each dvrow In dv            tmpNode.ID = dvrow("Nodeid")
                tmpNode.Text = dvrow("Nodename")
                'tmpNode.NavigateUrl = dvrow("Address")
                intid = dvrow("Parentid")
                Nds.Add(tmpNode)
                inittree(tb,Nds(Nds.Count - 1).Nodes, intid)
            Next
        End Sub
    在inittree函数中调用inittree函数,可能是这里除了问题。
      

  5.   

    http://218.56.11.178:8009/自己搜搜,开放源码的论坛!里边有TREEVIEW的用法。http://expert.csdn.net/Expert/topic/2248/2248544.xml?temp=.6887018c#的
      

  6.   


    Private Sub inittree(ByRef tb As datatable,ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal Parentid As Integer)
            Dim dv As New DataView
            Dim dvrow As DataRowView
            Dim tmpNode As New Microsoft.Web.UI.WebControls.TreeNode
            Dim intid As Integer
            dv.Table = tb
            dv.RowFilter = "Parentid = " & Parentid & ""
            For Each dvrow In dv            tmpNode.ID = dvrow("Nodeid")
                tmpNode.Text = dvrow("Nodename")
                'tmpNode.NavigateUrl = dvrow("Address")
                intid = dvrow("Parentid")
                Nds.Add(tmpNode)
                inittree(tb,Nds(Nds.Count - 1).Nodes, intid)
            Next
        End Sub
    在inittree函数中调用inittree函数,可能是这里除了问题。