VS2005 C#动态递归绑定TreeView(WinForm)
继续分享我在写程序当中的一些心得体会。其实早在学校的时候写博客,就经常分享一些自己的学习所得,不过那时候写程序都是 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: }
程序的运行结果是这样的,满足了我的需求。因为是小程序,数据也比较少,所以没有考虑数据库存储优化等等。
历史上的今天
2020年:儿童节快乐!(14条评论)
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条评论)
2011/05/31 08:45:12
和webform其实是差不多的嘛
2011/06/10 14:04:36
@Nathan, 后台代码都差不多的
2011/05/31 08:50:50
不搞这类开发,只会些web开发。
2011/06/10 14:06:18
@baros博客, 其实都差不多的,代码一个写法,就是界面设计不同
2011/05/31 09:42:42
呵呵,不懂
2011/06/10 14:09:02
@长沙二手房, 实在
2011/05/31 10:18:42
不错,原来也是业内前辈,哈哈
2011/06/10 14:10:18
@飞晏, 年龄上是,技术上估计就差了
2011/05/31 10:41:14
来看看了
2011/06/10 14:10:56
@太子虹, 谢谢
2011/05/31 12:17:43
过来学习技术
2011/06/10 14:11:32
@湖南seo, 欢迎
2011/05/31 13:43:57
不太懂技术,对搞技术的人很佩服
2011/06/10 14:19:20
@导航仪品牌排名, 什么时候建立起技术人员主导型社会呢
2011/05/31 19:48:48
支持了,呵呵。
2011/06/10 14:21:19
@电商圈, 谢谢
2011/05/31 20:16:58
兄弟也是。net程序员说! 我们交换个链接把, 我应经订阅你了
2011/06/10 14:26:49
@莫也, 我也订阅你了,给你加链接!
2011/05/31 20:31:47
适合的就是最好的程序 不过现在VS一般都在用2008 或2010好像……..
2011/06/10 14:08:43
@久酷, 上一个程序是用vs2010写的,装载XP下,根本体现不出来
2011/05/31 21:22:59
主题很好,我也在用
C#不懂哦
2011/06/10 14:13:54
@cc霜, 这个主题确实不错
2011/05/31 21:58:17
好讨厌写程序。。。
2011/06/10 14:17:39
@Xylon Pan, 我也很讨厌呢
2011/05/31 22:46:44
专业级别的人物 ! 只能纯支持一把了!
2011/06/10 14:18:22
@邓肯, 谢谢~
2011/05/31 23:13:00
果然C#和C完全不一样orz
2011/06/10 14:20:43
@lovee, C#和Java几乎完全一样
2011/05/31 23:35:35
小白看不懂纯围观~~
2011/06/10 14:21:12
@小灰, 欢迎围观
2011/06/01 22:12:11
这类玩意在CSDN最常见哈哈~马马虎虎能看懂了~
2011/06/10 21:02:11
@Afio, CSDN上面太杂乱了
2011/06/25 23:29:39
在递归里面读取数据库,会影响一点效率
2011/06/26 10:37:29
@网名繁体字, 数据很少