问题描述
publicpartialclassSortTree:System.Web.UI.UserControl{//privateinti;DataTabletable1;TreeNodetrNewNode;WebServicewebService=newWebService();protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){stringstrSql="Select*Fromz_GoodsType;";table1=webService.ExcuteSelect(strSql);//获得所有的类型的数据表foreach(DataRowdrRowintable1.Rows)//对数据表中的每一行{if(drRow["Type_fid"].ToString()=="0")//当它为最高一级{trNewNode=newTreeNode(drRow["Type_name"].ToString(),drRow["Type_typeID"].ToString());//新建节点trNewNode.SelectAction=TreeNodeSelectAction.Select;//设置节点的选择动作this.treeSort.Nodes.Add(trNewNode);//添加节点if(drRow["Type_haveChild"].ToString()=="y")//判断是否有字节点{DataTablechildTable=table1.Clone();//如果有,则新建一个同样结构的数据表foreach(DataRowrowintable1.Rows)//得到它的字节点列表{if(row["Type_fid"].ToString()==drRow["Type_typeID"].ToString()){DataRownewRow=childTable.NewRow();newRow.ItemArray=row.ItemArray;childTable.Rows.Add(newRow);}}Make_ChildNode(trNewNode,childTable);//递归}}}}}protectedvoidMake_ChildNode(TreeNodenode,DataTabledtTable){foreach(DataRowdrRowindtTable.Rows)//对字节点数据表{trNewNode=newTreeNode(drRow["Type_name"].ToString(),drRow["Type_typeID"].ToString());//新建节点trNewNode.SelectAction=TreeNodeSelectAction.Select;//设置节点的选择动作node.ChildNodes.Add(trNewNode);//添加节点if(drRow["Type_haveChild"].ToString()=="y")//判断是否有字节点{DataTablechildTable=table1.Clone();//如果有,则新建一个同样结构的数据表foreach(DataRowrowintable1.Rows)//得到它的字节点列表{if(row["Type_fid"].ToString()==drRow["Type_typeID"].ToString()){DataRownewRow=childTable.NewRow();newRow.ItemArray=row.ItemArray;childTable.Rows.Add(newRow);}}Make_ChildNode(trNewNode,childTable);//继续递归}}}}代码注释的太少或者很多没注释,我看不懂。treeview遍历一个产品数据表Type_fid字段是该产品的父类型号Type_typeID字段是产品id,Type_name字段是产品名称Type_haveChild字段是产品有无子节点ExcuteSelect()是已经建立好的返回datatable类型的函数最好能详细解释一下,因为我是新手,上面很多都不是很懂,越详细越好.比如,this.treeSort.Nodes.Add(trNewNode);//添加节点我认为新建节点了节点不就是等于添加节点吗?但我知道我的想法是错误的如果有子节点,为什么要克隆一个同样结构的数据表?newRow.ItemArray=row.ItemArray;这句是干吗用的,有人说是设置新克隆的这张表的列的字段的,请详细说明,同时,如果确实是设置字段的,那么既然都克隆了一个一样的表了,新表应该和原来的表是一样的啊,干吗还要再设置字段呢,不多余吗?在Make_ChildNode()中,row["Type_fid"].ToString()==drRow["Type_typeID"].ToString()这一句中的drRow指前面函数中传递过来的childtable的“行”,我想如果用table1的“行”来替换这个drRow会不会错!如果是错的,为什么?我问的请您给我详细解释,没问的请您也给我详细解释,我的新手,问题可能比较弱智,请您见谅!解释的越通俗形象越好!谢谢!
解决方案
解决方案二:
偶也知道问题太多,您懒得回答,可是放在百度上好多天都没人来答,请您帮帮忙!
解决方案三:
up
解决方案四:
太多了,有些问题等学得多了,自然就明白了,:)
解决方案五:
靠写这么多我看了就想吐
解决方案六:
递归说明了就是自己条用自己!很简单的啊目的是:节点下还有节点然而我们遍历节点下的数据使用方法是一样的参数也是一样的所以我们就用递归
解决方案七:
up