private void 总目录_Load(object sender, EventArgs e)
        {           
            string st2009 = gongyong.strcn;
            cn = new SqlConnection(st2009);
            DataTable dt;
            dt = new DataTable();
            //提取一级目录,以后要试着用dataread来做
            string strsql = "select distinct 一级目录 from 目录";
            SqlDataAdapter da = new SqlDataAdapter(strsql, st2009);
            da.Fill(dt);
            foreach (DataRow drr in dt.Rows)
            {
                string stdr = drr[0].ToString();
                treeView1.Nodes.Add(stdr,stdr);
                treeView1.Nodes[stdr].Tag = 1;
            }
            //提取二级目录,以后要用dataread来做
            dt.Clear();
            //打开连接
            cn.Open();
            strsql = "select distinct 一级目录,二级目录 from 目录";
            SqlCommand thiscommand = cn.CreateCommand();
            thiscommand.CommandText = strsql;
            SqlDataReader thisreader = thiscommand.ExecuteReader();
            while (thisreader.Read())
            {
                TreeNode tn = new TreeNode();
                tn.Tag = 2;
                tn.Name = thisreader[0].ToString()+thisreader[1].ToString();
                tn.Text = thisreader[1].ToString();
                treeView1.Nodes[thisreader[0].ToString()].Nodes.Add(tn);             
            }
            //提取三级目录,以后要用dataread来做
            thisreader.Close(); //关闭
            dt.Clear();            
            strsql = "select 一级目录,二级目录,三级目录 from 目录";
            //SqlCommand thiscommand = cn.CreateCommand();
            thiscommand.CommandText = strsql;
            thisreader = thiscommand.ExecuteReader();
            while (thisreader.Read())
            {
                TreeNode tn = new TreeNode();
                tn.Tag = 3;
                tn.Name = thisreader[0].ToString() + thisreader[1].ToString() + thisreader[2].ToString();
                tn.Text = thisreader[2].ToString();
                treeView1.Nodes[thisreader[0].ToString() + thisreader[1].ToString()].Nodes.Add(tn);
            }
        }以上代码,在后面treeView1.Nodes[thisreader[0].ToString() + thisreader[1].ToString()].Nodes.Add(tn);
报错了,提示没有对像,高人帮忙看一下,错在那里.

解决方案 »

  1.   

    treeView1.Nodes[thisreader[0].ToString()].[thisreader[0].ToString() + thisreader[1].ToString()].Nodes.Add(tn); 
      

  2.   

    现在时加在第三层节点上,但是你的代码
    treeView1.Nodes[thisreader[0].ToString() + thisreader[1].ToString()].Nodes.Add(tn); 
    表名是在名字为“thisreader[0].ToString() + thisreader[1].ToString()”第一节点加上第二节点
      

  3.   

    我还是没有搞定,我把代码改成如下
          private void 总目录_Load(object sender, EventArgs e)
            {           
                string st2009 = gongyong.strcn;
                cn = new SqlConnection(st2009);
                DataTable dt;
                dt = new DataTable();
                //提取一级目录,以后要试着用dataread来做
                string strsql = "select distinct 一级目录 from 目录";
                SqlDataAdapter da = new SqlDataAdapter(strsql, st2009);
                da.Fill(dt);
                foreach (DataRow drr in dt.Rows)
                {
                    string stdr = drr[0].ToString();
                    treeView1.Nodes.Add(stdr,stdr);
                    treeView1.Nodes[stdr].Tag = 1;
                }
                //提取二级目录,以后要用dataread来做
                dt.Clear();
                //打开连接
                cn.Open();
                strsql = "select distinct 一级目录,二级目录 from 目录";
                SqlCommand thiscommand = cn.CreateCommand();
                thiscommand.CommandText = strsql;
                SqlDataReader thisreader = thiscommand.ExecuteReader();
                while (thisreader.Read())
                {
                    TreeNode tn = new TreeNode();
                    tn.Tag = 2;
                    tn.Name = thisreader[1].ToString() + "a";
                    tn.Text = thisreader[1].ToString();
                    treeView1.Nodes[thisreader[0].ToString()].Nodes.Add(tn);             
                }
                //提取三级目录,以后要用dataread来做
                thisreader.Close(); //关闭
                dt.Clear();            
                strsql = "select 二级目录,三级目录 from 目录";
                //SqlCommand thiscommand = cn.CreateCommand();
                thiscommand.CommandText = strsql;
                thisreader = thiscommand.ExecuteReader();
                while (thisreader.Read())
                {
                    TreeNode tn = new TreeNode();
                    tn.Tag = 3;
                    string bb = thisreader[0].ToString() + "a";
                    string cc = thisreader[1].ToString();
                    tn.Name = bb + cc;
                    tn.Text = cc;
                    //string a = treeView1.Nodes[aa + bb].Nodes.Count.ToString();
                    //TreeNode tnp = treeView1.Nodes[0];
                    //int i=treeView1.Nodes.Count;
                    for(int i=0;i<treeView1.Nodes.Count;i++)
                    {
                        //MessageBox.Show(treeView1.Nodes[i].Name.ToString());
                        if (treeView1.Nodes[i].Name.ToString() == bb)
                        {
                            treeView1.Nodes[i].Nodes.Add(tn);
                        }
                    }
                   // int i=treeView1.Nodes[aa + bb].Nodes.Count;
                    //tnp.Nodes.Add("111");
                }
            }
      

  4.   

    改成这样子,虽然没有报错,但是只有两级目录,第三层目录等于没有写,我用MessageBox.Show(treeView1.Nodes[i].Name.ToString()来测试一下,我发现根本没有循环第二层节点,只在第一层节点上循环.
      

  5.   

    可以试用一下树形无限级protected void Page_Load(object sender, EventArgs e)
        {
            
            this.TreeView1.Nodes.Clear();
            AddTree((int)0, (TreeNode)null);    }    private void AddTree(int Pid, TreeNode pNode)
        {
            //第一次查询传参0
            itemFolderlist = ItemFolderBLL.GetItemFolderListByParentID(Pid);//查询参数为pid的所有数据        foreach (ItemFolder itemfolder in itemFolderlist)
            {
                TreeNode node = new TreeNode();            //第一节点为空
                if (pNode == null)
                {
                    node.Text = itemfolder.Name;
                    node.Value = "01";
                    node.ToolTip = itemfolder.Name;
                    node.Expanded = true;
                    node.NavigateUrl = "ItemList.aspx?ItemFolderID=" + itemfolder.ID;
                    node.Target = "Frame2";                this.TreeView1.Nodes.Add(node);//第一次树加第一节                AddTree(itemfolder.Pid, node);//第一次转参数循环
                }
                else
                {
                    //第二节至n次
                    node.Text = itemfolder.Name;
                    node.Value = "01";
                    node.ToolTip = itemfolder.Name;
                    node.Expanded = false;
                    node.NavigateUrl = "ItemList.aspx?ItemFolderID=" + itemfolder.ID;
                    node.Target = "Frame2";
                    pNode.ChildNodes.Add(node);//第二次至n次树加节点                AddTree(itemfolder.Pid, node);//第二次至n转参数循环
                }
            }
      

  6.   

    问一下,tree上的node 所在层次不一样,name属性可以重复吗