如题,TreeView绑定数据库后增加节点,如何判断是根节点还是子节点还是下下一级节点,删除.修改,都实现了,就差个新增,我用的右键菜单, 新增节点分增加同级和下级 ,增加后怎么在数据库中也添加上 不会了,请教各位大神.
数据库表结构:
ID(自增)   Context(所有的节点名)   ParentID(父ID)
现在就是怎么判断增加的是同级节点还是下级节点,讲个方法就好,最好给点代码,tag用的不是很熟练,搞不定.
还有一个问题就是 增加.删除.修改后 treeview的刷新,我是用的重新绑定一次数据库,有没有其他的办法实现动态刷新,  treeView1.Refresh()不好使啊. 刚研究TreeView 不是很懂~  无法一两句说明请注明一个联系方式,小弟我在此恭候!!

解决方案 »

  1.   

     if (treeView1.SelectedNode.Parent == null)  这个就是根节点,我知道else  就是子节点    这样判断有作用么? 不明白,再下一级怎么判断, 如果这样可以增加请给点对应代码,感激涕零中~~
      

  2.   

    node的text保存你的context,tag保存你的parentId 
    找父节点 tree.SelectedNode.Parent.Tag.ToString();
      

  3.   

    你可以用选中节点的ValuePath去定位父节点,这个用起来方便,又快速
      

  4.   

    新增同级  我实现了 
     SqlCommand cmd = new SqlCommand("insert into tbtree(Context,ParentID) values('" + textBox1.Text + "','" + Node.Tag.ToString() + "')", conn);
                cmd.ExecuteNonQuery();
    新增子级 依旧在数据库中加的同级节点  一样的代码还不行?  他们节点的tag不一样啊
      

  5.   

    就是增加子级的时候 怎么找到选择的父节点之下的 同级子节点的tag 找到这个应该就可以增加下级了
      

  6.   

    因为父节点下的子节点的tag是一样的 这样我想插入的时候直接插入这个tag应该就可以
      

  7.   


    反正你tag保存你的id就是了,根据id一层一层实现你的父子关系这样
      

  8.   

    我建议你使用递归方法,来解决把,我刚刚用他解决了一个显示国家信息的目录显示在TreeView中(还要连接数据库的)
    如果你不知道TreeView的深度,那你只能听我的。
      

  9.   

    //ID(自增)  Context(所有的节点名)  ParentID(父ID) 
                //你结构很简单 你用
                TreeNode node = new TreeNode();
                node.Text = "名称";
                node.Tag = "上级id,没上级放NULL";
                node.Name = "id";
                //新增节点时如果是统计节点你就拿node.Tag
                //是下级节点拿node.name 这样就行了吗
                //或是node.Text = "名称";  node.Tag = "id";
                //新增节点时如果是统计节点你就拿node.Parent.Tag(这里要注意加判断 没上级节点的情况)
                //是下级节点拿node.tag 这样就行了吗
      

  10.   

    如果在最后一级 也就是末节点 再新增下级呢 这个下级的tag怎么整  刚才没考虑全 
      

  11.   


    tag保存id?  我保存的Pid  只有在Pid中才体现层次关系啊  我不知道怎么利用节点的tag绑定 id的自增  实现层次
      

  12.   

    你insert into 之后执行select @@identity
    会返回你insert into后生成的递增id值
      

  13.   

    现在的问题是: 我生成树的时候  tag都取的ID值 ,这样再新增下级节点的时候 会生成同级的
                                如果  tag取 ParentID的值,新增同级  会生成下级节点  这很郁闷 ~ 该怎么办呢
      

  14.   

    刚才说错了    新增同级:
      SqlCommand cmd = new SqlCommand("insert into tbtree(Context,ParentID) values('" + textBox1.Text + "','" + treeView1.SelectedNode.Tag.ToString()  + "')", conn);
    新增下级:
     SqlCommand cmd = new SqlCommand("insert into tbtree(Context,ParentID) values('" + textBox1.Text + "','" + treeView1.SelectedNode.Parent.Tag.ToString() + "')", conn);这是tag取ID的时候,就是这样 新增下级节点一点问题没有, 如果新增同级的话 也会归到下级节点中
      

  15.   

    自写方法:
    void GetTreeViewNode(DataTable dt, TreeNodeCollection tnc)
        {
            foreach (DataRow dr in dt.Rows)
            {
                TreeNode tn = new TreeNode();
                tn.Text = dr["managetitle"].ToString();
                tn.Value = dr["manageid"].ToString();
                tn.NavigateUrl =Convert.ToString(dr["url"]);
                tnc.Add(tn);
                tn.PopulateOnDemand = ((int)(dr["account"]) > 0);
            }
        }TreeView的 TreeView1_TreeNodePopulate  事件:
    SqlConnection conn = new SqlConnection("server=.;database=news;uid=sa;pwd=123;");
            string strsql = "select manageid,managetitle,managepower,url,(select count(*) from manage where managepower=a.manageid) account from manage a where managepower=@pid";
            SqlDataAdapter sda = new SqlDataAdapter(strsql, conn);
            sda.SelectCommand.Parameters.Add("@pid", SqlDbType.Int);
            sda.SelectCommand.Parameters["@pid"].Value = e.Node.Value;
            DataSet ds = new DataSet();
            sda.Fill(ds, "table");
            GetTreeViewNode(ds.Tables["table"], e.Node.ChildNodes);
    把字段换下就可以了
      

  16.   

    拖拽
    private void treeView_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
            {
                DoDragDrop(e.Item, DragDropEffects.Move); 
            }
            private void treeView_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
            {
             e.Effect = DragDropEffects.Move;
            }
            private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
            {
                TreeNode NewNode; 
                if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false)) 
                {
                    Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
                    TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt); 
                    NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode"); 
                    if(DestinationNode.TreeView != NewNode.TreeView) 
                    {
                        DestinationNode.Nodes.Add((TreeNode) NewNode.Clone());
                        DestinationNode.Expand(); 
                    } 
                } 
            }
    参考
      

  17.   

    先选中TreeView的节点,然后可以把tag去出来,然后复制ParentId就可以了啊。
      

  18.   

    treeView1.SelectedNode.Parent.Parent!=null