-- 作者:admin
-- 发布时间:11/9/2004 2:26:00 AM
-- TreeView使用的一些心得
发信人: minerva (cheng), 信区: DotNET 标 题: TreeView使用的一些心得 发信站: BBS 水木清华站 (Sun Sep 7 10:33:31 2003), 转信 (1)动态生成TreeView 假设数据库中有两个表,一个为班级表,有班号和班名两个属性,班号ccode为主键,一 个为学生表,有学号和姓名两个属性,学号scode为主键,根节点为学院。又假设在db类 中已经写好了从数据源中选择数据的Select方法。树控件ID为TREE。 Void InTree() { Tree.Nodes.Clear(); TreeNode Root = New TreeNode(); Root.Text = "学院"; Root.Type = "0"; Tree.Node.Add(Root); string strSql="SELECT * FROM CLASS"; DataTable dt = New DataTable(); dt = this.db.Select(strSql); for(int i=0;i<dt.Rows.Count;i++) { TreeNode tmpnode = new TreeNode(); Root.Nodes.Add(tmpnode); tmpnode.ID = dt.Rows[i][0].Tostring(); tmpnode.Text = dt.Rows[i][1].Tostring(); tmpnode.type = "1"; string strSql1 = "SELECT * FROM STUDENT"; DataTable dt1 = new DataTable(); dt1 = this.db.Select(strSql1); for(int j = 0; j<dt1.Rows.Count;j++) { TreeNode tmpNd = New TreeNode(); tmpnode.Nodes.Add(tmpNd); tmpNd.ID = dt1.Rows[i][0].Tostring(); tmpNd.Text = dt1.Rows[i][1].Tostring(); tmpNd.Type ="2"; } } } (2)遍历树 一般是递归算法,网上的算法一般是酱紫的 public void GetAllNodeText(TreeNodeCollection tnc) { foreach (TreeNode node in tnc) { if( node.Nodes.Count != 0 ) GetAllNodeText(node.Nodes); } } 但是在做项目时我发现一个问题,用foreach循环,在对treeview节点的checkbox属性为 true多个节点进行遍历删除时,会出现枚举错误,所以我采用了for循环写法. 代码如下: Void GetRoot() { TreeNode Root = TREE.GetNodeFromIndex("0"); DELET(Root); } Void DELEt(TeeNode node) { for(int i =0;i<node.Nodes.Count;i++) { TreeNode Tnode = new TreeNode(); Tnode = node.Nodes[i]; if(node.Checked == true) { Tnode.ReMove(); i--; } else { DELET(Tnode); } } } 另外,网上在做删除操作时,总是先用TreeNode NdSel = (TreeNode)Tnode.Parent.得到父 节点,然后用NdSel.Remove(Tnode);实践证明,不需要如此. 今天线写道这里,因为写的时候没有.net编译器,程序可能有错,希望大家原谅,晚些时候再 补充一些. 时间匆忙,没写注释,晚些时候一起补上. -- ※ 修改:·minerva 于 Sep 7 10:35:16 修改本文·[FROM: 210.42.96.114] ※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.42.96.114] 上一篇 返回上一页 回到目录 回到页首 下一篇
|