VS2005 C#动态递归绑定TreeView(WinForm)

时间: 2011-05-31 / 分类: 学习心得 / 浏览次数: 12,797 / 34个评论 发表评论

继续分享我在写程序当中的一些心得体会。其实早在学校的时候写博客,就经常分享一些自己的学习所得,不过那时候写程序都是 WebForm 的,基本上没有写过 WinForm 的程序。现在不同了,工作中用到 web 程序的机会不多,反而桌面端的程序用的多了,只好改行做 WinForm 程序了。

我定义了一个单位数据表,用来存储单位信息,程序运行时要从数据库里取出单位信息动态绑定在 TreeView 树形菜单。这个数据表的结构是这样的:

下面是相关的程序代码:


  1:         OleDbConnection connection = null;
  2:         OleDbCommand command = null;
  3:         OleDbDataAdapter dataAdapter = null;
  4:         string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " +
  5:                     Application.StartupPath + @"\Database\TEST.mdb" + "; Jet OleDb:Database Password = 12345";
  6:         
  7:         private void FormMain_Load(object sender, EventArgs e)
  8:         {
  9:                 //初始化TreeView信息
 10:                 TreeViewUnit_DataBind();
 11:         }
 12:         protected void TreeViewUnit_DataBind()
 13:         {
 14: 
 15:             //初始化连接
 16:             connection = new OleDbConnection(connectionString);
 17:             //打开连接
 18:             connection.Open();
 19: 
 20:             //初始化TreeView信息
 21:             this.treeViewUnit.Nodes.Clear();
 22:             TreeNode root = new TreeNode("单位列表");     //添加根节点
 23:             root.Expand();
 24:             this.treeViewUnit.Nodes.Add(root);
 25: 
 26:             string sqlStr = "SELECT * FROM UNIT WHERE SuperiorID = 0";  //选择大单位节点
 27: 
 28:             dataAdapter = new OleDbDataAdapter(sqlStr, connection);
 29:             DataSet ds = new DataSet();
 30:             dataAdapter.Fill(ds);
 31:             DataView dv = ds.Tables[0].DefaultView;
 32: 
 33:             foreach (DataRowView row in dv)
 34:             {
 35:                 string unitName = row["Unit_Name"].ToString().Trim();
 36:                 int unitID = Convert.ToInt32(row["ID"].ToString().Trim());
 37:                 TreeNode unit=new TreeNode(unitName);
 38:                 unit.Expand();
 39: 
 40:                 TreeView_AddChildNodes(unit, unitID);
 41:                 this.treeViewUnit.Nodes.Add(unit);
 42:             }
 43: 
 44:             //关闭连接
 45:             connection.Close();
 46:         }
 47: 
 48:         //TreeView递归添加子节点
 49:         protected void TreeView_AddChildNodes(TreeNode node, int nodeID)
 50:         {
 51:             string sqlStr="SELECT * FROM UNIT WHERE SuperiorID = " + nodeID;
 52:             dataAdapter = new OleDbDataAdapter(sqlStr, connection);
 53:             DataSet ds = new DataSet();
 54:             dataAdapter.Fill(ds);
 55:             DataView dv = ds.Tables[0].DefaultView;
 56: 
 57:             foreach (DataRowView row in dv)
 58:             {
 59:                 string unitName = row["Unit_Name"].ToString().Trim();
 60:                 int unitID = Convert.ToInt32(row["ID"].ToString().Trim());
 61:                 TreeNode unit = new TreeNode(unitName);
 62:                 unit.Expand();
 63: 
 64:                 TreeView_AddChildNodes(unit, unitID);
 65:                 node.Nodes.Add(unit);
 66:             }
 67:         }

程序的运行结果是这样的,满足了我的需求。因为是小程序,数据也比较少,所以没有考虑数据库存储优化等等。

历史上的今天

2017年:Asics GEL-KAYANO 23 LITE-SHOW T6A1N-9793夜跑鞋(19条评论)

2016年:《爱的教育》:街路(18条评论)

2015年:快乐星期天364期:娱乐圈(22)(25条评论)

2013年:更快、更简、更强——4款安卓系统Facebook应用[译文207](28条评论)

2012年:生活箩筐011(55条评论)

2010年:计划不如变化快(64条评论)

2009年:快乐星期天五十一期:中国队来了,快跑!(0条评论)

2009年:走上街头的学生们,很傻很天真!(0条评论)

2008年:《银行抢劫案 (The Bank Job)》(0条评论)

2008年:《鸠占鹊巢(The Other Boleyn Girl)》(0条评论)

2008年:《神探 (Mad Detective)》(0条评论)

2008年:重发niubility、zhuangbility、shability、erbility(0条评论)

2008年:《密码疑云(Apocalypse Code)》(0条评论)

2008年:《妈妈的新男友(My Mom's New Boyfriend)》(0条评论)

2008年:[地震知识]山东会有地震吗?中国的几条地震带(0条评论)

2006年:我的导师(1条评论)

2006年:我看电影《达芬奇密码》(0条评论)

34个评论

  1. Nathan
    2011/05/31 08:45:12

    和webform其实是差不多的嘛

  2. baros博客
    2011/05/31 08:50:50

    不搞这类开发,只会些web开发。

  3. 长沙二手房
    2011/05/31 09:42:42

    呵呵,不懂

  4. 飞晏
    2011/05/31 10:18:42

    不错,原来也是业内前辈,哈哈

  5. 太子虹
    2011/05/31 10:41:14

    来看看了

  6. 湖南seo
    2011/05/31 12:17:43

    过来学习技术

  7. 导航仪品牌排名
    2011/05/31 13:43:57

    不太懂技术,对搞技术的人很佩服

  8. 电商圈
    2011/05/31 19:48:48

    支持了,呵呵。

  9. 莫也
    2011/05/31 20:16:58

    兄弟也是。net程序员说! 我们交换个链接把, 我应经订阅你了

  10. 久酷
    2011/05/31 20:31:47

    适合的就是最好的程序 不过现在VS一般都在用2008 或2010好像……..

    • Louis Han
      2011/06/10 14:08:43

      @久酷, 上一个程序是用vs2010写的,装载XP下,根本体现不出来

  11. cc霜
    2011/05/31 21:22:59

    主题很好,我也在用
    C#不懂哦

  12. Xylon Pan
    2011/05/31 21:58:17

    好讨厌写程序。。。

  13. 邓肯
    2011/05/31 22:46:44

    专业级别的人物 ! 只能纯支持一把了!

  14. lovee
    2011/05/31 23:13:00

    果然C#和C完全不一样orz

  15. 小灰
    2011/05/31 23:35:35

    小白看不懂纯围观~~

  16. Afio
    2011/06/01 22:12:11

    这类玩意在CSDN最常见哈哈~马马虎虎能看懂了~

  17. 网名繁体字
    2011/06/25 23:29:39

    在递归里面读取数据库,会影响一点效率

发表评论

您的昵称 *

您的邮箱 *

您的网站