【IT168技术文档】
最近做了一点小东西 ,用到了递归在TreeView中加node 觉得很好用 写一点心得与大家分享
刚一说到递归 可能大家会很头疼,因为大家觉得他可能很神秘,不好弄.但是只要你明白了其中的原理,递归还是有它好用之处的,对于有规律的数据,递归可以帮你搞定.而不用自己在费脑子在哪写很多代码/
说了半天递归到底是怎么回事呢.其实大白话自己套用自己的循环.首先递归要有入口.没有入口的循环是无法进行的.其次你的循环要能出来.不要无限循环下去.
下面就已我做的treeView中加节点 的例子来说明递归的方法
这样大家就会有形象的认识了
先来看看我的数据库的设计

主要用到的是 前三个字段
这里的代码我用的是强类型数据集 便于理解每个段的意思
private void Init() { Xs_Areaset = new DALXs_Areaset(); dsSelect = Xs_Areaset.FindDsXs_AreasetByCode("-1");//先找到一个最上面的节点,也就是给个入口 //foreach (dsXs_Areaset.Xs_AreasetRow Row in dsSelect.Xs_Areaset.Rows) //{ // TreeNode node = new TreeNode(Row.AreaName.ToString()); // node.Tag = Row.AreaCode.ToString(); // trvAreare.Nodes.Add(node); // ShowChildNode(node); //}//用了两种 foreach 和for都行 推荐用foreach 两种发法的机制不一样 foreach安全 效率高 for (int i = 0; i < dsSelect.Xs_Areaset.Rows.Count; i++) { TreeNode node = new TreeNode(dsSelect.Xs_Areaset.Rows[i][1].ToString()); node.Tag = dsSelect.Xs_Areaset.Rows[i][0].ToString(); trvAreare.Nodes.Add(node); ShowChildNode(node); } trvAreare.Nodes[0].Expand();//第一项展开 trvAreare.SelectedNode = trvAreare.Nodes[0];//默认选中第一项 } /// <summary> /// 显示子节点 /// </summary> private void ShowChildNode(TreeNode node)//编写的递归的方法 { //TreeNode node; //node = this.trvAreare.SelectedNode; //string ParentCode = trvAreare.SelectedNode.Tag.ToString(); //dsSelectChile = new dsXs_Areaset(); dsXs_Areaset dsSelectChile = new dsXs_Areaset(); //using (Xs_Areaset=new DALXs_Areaset())//强制垃圾回收 可以不用 也可以不懂 //{ dsSelectChile = Xs_Areaset.FindDsXs_AreasetByCode(node.Tag.ToString()); //} //foreach (dsXs_Areaset.Xs_AreasetRow Row in dsSelectChile.Xs_Areaset.Rows) //{ // TreeNode nd = new TreeNode(Row.AreaName.ToString()); // nd.Tag = Row.AreaCode.ToString(); // node.Nodes.Add(nd); // ShowChildNode(nd); //} for (int i = 0; i < dsSelectChile.Xs_Areaset.Rows.Count; i++)//循环必须写对了 要能循环出来才行 { dsXs_Areaset.Xs_AreasetRow Row = (dsXs_Areaset.Xs_AreasetRow)dsSelectChile.Xs_Areaset.Rows[i]; TreeNode nd = new TreeNode(Row.AreaName.ToString()); nd.Tag = Row.AreaCode.ToString(); node.Nodes.Add(nd); ShowChildNode(nd);//自己套用自己 递归方法的体现 } }