本文转载:http://www.cnblogs.com/VincentLuo/archive/2008/03/29/1128987.html

在 汪洋怡舟的这篇文章中【http://www.cnblogs.com/longren629/archive/2007/03/14/674633.html】只使用了一个数据表,效果如图2

我想使用多个表来生成动态的treeview,效果如图三,代码如下所示

在第二次与第三次的代码中,代码出现重复,中间只是改了表名、列名

多个表之间,是否也可以实现递归呢,不管它的表名与列名是否相同?

protected DataSet BindDate(string select)
    {
        Database db = DatabaseFactory.CreateDatabase();
        DbCommand cmd = db.GetSqlStringCommand(select);
        DataSet ds = db.ExecuteDataSet(cmd);
        return ds;
    }

public void BindTree()//第一次
    {
        DataSet ds = BindDate("select * from tree");
        int count = ds.Tables[0].Rows.Count;
        for (int i = 0; i < count; i++)
        {
            TreeNode tn = new TreeNode();
            tn.Text = ds.Tables[0].Rows[i]["Name"].ToString();
            tn.Value = ds.Tables[0].Rows[i]["ID"].ToString();
            BindRoot("select * from Root where ID='" + int.Parse(ds.Tables[0].Rows[i]["ID"].ToString()) + "'", tn);
            trvList.Nodes.Add(tn);
        }
    }
    public void BindRoot(string sql, TreeNode TN)//第二次
    {
        DataSet ds = BindDate(sql);
        int count = ds.Tables[0].Rows.Count;
        for (int i = 0; i < count; i++)
        {
            TreeNode tn = new TreeNode();
            tn.Text = ds.Tables[0].Rows[i]["Name"].ToString();
            tn.Value = ds.Tables[0].Rows[i]["RootID"].ToString();
            BindParent("select * from Parent where RootID='" + int.Parse(ds.Tables[0].Rows[i]["RootID"].ToString()) + "'", tn);
            TN.ChildNodes.Add(tn);
        }
    }
    public void BindParent(string sql, TreeNode TN)//第三次
    {
        DataSet ds = BindDate(sql);
        int count = ds.Tables[0].Rows.Count;
        for (int i = 0; i < count; i++)
        {
            TreeNode tn = new TreeNode();
            tn.Text = ds.Tables[0].Rows[i]["Name"].ToString();
            tn.Value = ds.Tables[0].Rows[i]["RootID"].ToString();
            TN.ChildNodes.Add(tn);
        }
    }
}

文件下载:http://files.cnblogs.com/VincentLuo/SolutionTreeView.rar

Winfrom treeview 如何从多个数据表中获取数据动态生成的更多相关文章

  1. DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)

    /// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...

  2. 将数据表中的数据添加到ComboBox控件中

    实现效果: 知识运用: ComboBox控件的DataSource 属性 //获取或设置ComboBox的数据源 public Object DataResouce{get;set;} //属性值:任 ...

  3. 向mysql数据表中插入数据失败的原因

    1.案例代码: $sql1="insert into content(category,subject,content,username,release_date) values('{$ca ...

  4. code first网站发布后数据表中没有数据问题

    code first网站发布后数据表中没有数据问题 (1).将internal sealed class Configuration类访问修饰符改为public  class Configuratio ...

  5. python连接mysql数据表查询表获取数据导入到txt中

    import pymysql'''连接mysql数据表查询表获取数据导入到txt中'''#查询结果写入数据到txtdef get_loan_number(file_txt): connect = py ...

  6. SQL语句的使用,SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数据 INSERT INTO - 向数据库表中插入数据

    SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法. 但是 SQL 语言也包含用于更新. ...

  7. 触发器修改后保存之前的数据 表中插入数据时ID自动增长

    create or replace trigger t before update on test5 for each rowbegin insert into test55 values (:old ...

  8. MySQL删除数据表中重复数据

    今天遇到一个问题,数据表的数据有重复的,关键原因在于新增数据时,没有根据条件先判断数据是否存在,当数据存在时进行有关条件的更新,不存在时做新增数据. 对于表中已经存在的数据处理办法的方法: 1.先根据 ...

  9. 查询和删除数据表中反复数据的sql

    1.查询表中反复数据. select * from people where peopleId in (select   peopleId   from   people   group   by   ...

随机推荐

  1. (转)linux 技巧:使用 screen 管理你的远程会话

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-screen/index.html 你是不是经常需要 SSH 或者 telent 远程登录到 Li ...

  2. 新LNMP环境,但是SESSION跨页面或者刷新 session丢失

    唠叨:本地WAMP做了一个微信项目,一切OK,昨天需要在LINUX架设一套LNMP环境.但是,在架设代码的时候,登录总是不成功~~~ 最终解决:权限 其实,作为一个程序猿,只要涉及到服务器内容,都应该 ...

  3. html树形菜单控件

    html树形菜单控件  链接 http://www.ithao123.cn/content-713974.html         jQuery plugin: Treeview  这个插件能够把无序 ...

  4. VS2005工程增加SDK

    客户最近发过来一个VS2005的工程,此工程是基于Pocket PC 2003(ARMV4),需要改为我们WINCE6.0系统对应的SDK,下面具体说明如何添加新的SDK. 选择configurati ...

  5. Windows使用virtualenv搭建flask开发环境

    virtualenv: VirtualEnv用于在一台机器上创建多个独立的Python虚拟运行环境,多个Python环境相互独立,互不影响,它能够: 在没有权限的情况下安装新套件 不同应用可以使用不同 ...

  6. Java数据库增删改查

    数据库为MySQL数据库,Oracle数据库类似: create database db_test;--创建数据库 ';--创建用户 grant all privileges on db_test.* ...

  7. 菜单练习-关机&取消

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> voi ...

  8. CQOI2009中位数图

    原来在vijos上做过,当时根本看不懂 现在看起来这么水…… x记录从b向左连续走比k大的有多少个 y记录从b向右连续走比k大的有多少个 最后根据乘法原理乘一下 不过要加上x[0]+y[0]+1 因为 ...

  9. x86、i386、i486、i586、i686和x86_64

    1.386与686 i386—几乎所有的X86平台,不论是旧的pentum或者是新的pentum-IV与K7系统CPU,都可以正常工作,i指得是Intel兼容的CPU,至于386就是CPU的等级.i5 ...

  10. hibernate缓存:一级缓存和二级缓存

    1.什么是缓存? 缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用程序的运行性能.Hibernate在 ...