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

求助,关于treeview添加节点数据库的数据

我的SQL数据库有两张表,一张是父节点(Fujiedian),一张是子节点(Zijiedian),父节点的表有两列:ID,FU.子节点有3列:ID,ZI,Zid.其中子节点的Zid外键绑定父节点的ID,(其实就可以理解成QQ好友那样,父节点就是QQ好友的分组,子节点就是QQ好友),

//这段代码是读取信息的,让表里的数据按组添加到树状列表里面(希望有高手能帮忙改进一下,,这个有点2...)
public void Form2_Load(object sender, EventArgs e)
        {
            this.treeView1.Nodes.Clear();

            SqlConnection con = new SqlConnection(@"..........;");

            SqlCommand cmd = con.CreateCommand();
            cmd.CommandText = "select * from Fujiedian";
            con.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                treeView1.Nodes.Add(dr.GetValue(1).ToString());
            }
            int a;
            SqlConnection con1 = new SqlConnection(@".......;");
            SqlCommand cmd1 = con1.CreateCommand();
            cmd1.CommandText = "select * from Zijiedian";
            con1.Open();
            SqlDataReader dr1 = cmd1.ExecuteReader();
            while (dr1.Read())
            {
                a = (Convert.ToInt32(dr1.GetValue(2)) - 1);
                treeView1.Nodes[a].Nodes.Add(dr1.GetValue(1).ToString());
            }
}

//下面代码是想删除父节点

                dbCommand db = new dbCommand();//无视这边之前定义了一个总类的
                string sql = "delete from Fujiedian where ID=@zid";
                SqlParameter[] parm = new SqlParameter[]
                {
                new SqlParameter("zid",(Convert.ToInt32(this.treeView1.SelectedNode.Index))+1)
                 };
                if (db.execNonQueryBySql(sql, parm))
                {
                    MessageBox.Show("删除成功!");
                }


现在问题就在这了。。按照我这样写的代码,删除分组的时候出现各种问题。。
我还是上两张图好看些吧。。
这是开始读取的数据库数据,除了feibeizhu这个没有子节点,其他都对应一个和跟自己名字一样的子节点

因为绑定了外键的,要先删除子节点才能删除父节点,我把feibeizhu这个父节点专门没设子节点,然后我将他删除,结果出现了这个问题。。。

删了之后子节点外溢了。。


求高手帮忙看看怎么回事,是我数据库没设计好还是代码有错误吗?希望帮忙改进一下我的程序,谢谢了!!顺便求高手帮忙写一下怎么删除选中的子节点(不用考虑判断选中的是不是子节点哈。。)
数据库 sql qq treeview --------------------编程问答-------------------- 有没有人啊。。。 --------------------编程问答-------------------- 表设计没问题,一般的做法是:
读取父节点数据集
父节点循环
针对于某个父节点id,去所有的子节点
循环把子节点加到父节点上
父节点循环结束


 SqlDataReader dr1 = cmd1.ExecuteReader();
            while (dr1.Read())
            {
                a = (Convert.ToInt32(dr1.GetValue(2)) - 1);
                treeView1.Nodes[a].Nodes.Add(dr1.GetValue(1).ToString());
            }

删除之后应该是你这块代码映射出了问题。 --------------------编程问答-------------------- 不知道你为什么要用2张表存,一张表就够了,
另外你绑定的也有问题,
用sql直接返回2个DataTable,然后循环绑定就可以了,,
如果有多级,用递归绑定。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,