100分求treeview 用法代码

问题描述

我的类别设置是这样的3个长度为一个级别表tableABC1000类别12001类别23002类别34000000类别115001000类别216002001类别32怎么写递归把所有类别输出,求完整代码c#,谢谢,急用

解决方案

解决方案二:
TreeNodenode=newTreeNode();node.Text="dgd服务器";node.Value="0";Stringsql="selectnamefromsysdatabases";dt=SqlHelper.gettable(sql,"master").Tables[0];buildtree(node,dt);buildtreeye(node);TreeView1.Nodes.Add(node);for(inti=0;i<node.ChildNodes.Count;i++){node.ChildNodes[i].CollapseAll();}publicvoidbuildtree(TreeNodenode,DataTabledtgen){for(inti=0;i<dtgen.Rows.Count;i++){TreeNodegen=newTreeNode();gen.Text=dtgen.Rows[i][0].ToString();node.ChildNodes.Add(gen);}}publicvoidbuildtreeye(TreeNodenode){stringsql="selectnamefromsysobjectswherextype='u'";for(inti=0;i<node.ChildNodes.Count;i++){dt=SqlHelper.gettable(sql,node.ChildNodes[i].Text).Tables[0];for(intj=0;j<dt.Rows.Count;j++){buildtree(node.ChildNodes[i],dt);}}}
解决方案三:
试着写了下,没做测试,你试试。System.Data.DataTabledt;//设你已经查询出了DataTable,做为全局变量,当然做为参数传递也可以。//==========================================TreeViewtv=newTreeView();//新建一个TreeViewSystem.Data.DataRow[]drs=dt.Select();foreach(System.Data.DataRowdrindrs){//将根目录加入if(IsSubClass("",dr["B"].ToString(),0)){TreeNodetn=newTreeNode();tn.NavigateUrl="showclass.aspx?id"+dr["A"].ToString();tn.Text=dr["C"].ToString();tv.CheckedNodes.Add(tn);AddClass(dr["B"].ToString(),tn,1);//加子目录}}//===========================publicvoidAddClass(stringpid,TreeNodepnode,intdepth){System.Data.DataRow[]drs=dt.Select();foreach(System.Data.DataRowdrindrs){if(IsSubClass(pid,dr["B"],depth+1)){//判断为子目录TreeNodetn=newTreeNode();tn.NavigateUrl="showclass.aspx?id"+dr["A"].ToString();tn.Text=dr["C"].ToString();pnode.ChildNodes.Add(tn);AddClass(dr["B"].ToString(),tn,depth++);//递归}}}publicboolIsSubClass(stringpid,stringcid,intdepth){//判断该目录是否为指定目录的子目录if(cid.Length==3&&depth==0)//根目录深度为0,长度为3returntrue;//根目录elseif(cid.Length>(depth+1)*3) //子目录长度为深度+1乘3returnfalse;elseif(cid.Substring(0,cid.Length-3)!=pid)//子目录除后面3个数外前面应与父目录的字串一样returnfalse;elsereturntrue;}

解决方案四:
DataTable的Select应该可以过滤如dt.Select("Blike'"+pid+"???'"); 这样返回的DataRow数量应该少点,开销小点,不过这方法我没试过,所以没写出来,你试试。
解决方案五:
表tableA(ID)B(ParentID)C10类别120类别230类别341类别1152类别2163类别32也就是ParentID写的是ID的编号。代码如下。///<summary>///递归添加树的节点///</summary>///<paramname="ParentID"></param>///<paramname="pNode"></param>publicvoidAddDefaultTree(intParentID,TreeNodepNode){try{DataViewdvTree=newDataView();dvTree=//返回数据;//过滤ParentID,得到当前的所有子节点dvTree.RowFilter="[PARENTID]="+ParentID;foreach(DataRowViewRowindvTree){TreeNodeNode=newTreeNode();if(pNode==null){//添加根节点Node.NavigateUrl=Row["TargetURL"].ToString();Node.Target=Row["TargetWindow"].ToString();Node.Text="<imgsrc='images/main/leftmenuicon4.gif'border='0'hspace='3'align='absmiddle'><spanonmousemove=javascript:title='"+Row["MenuName"]+"'>"+Row["MenuName"].ToString().Trim()+"</span>";this.OAModualMenu.Nodes.Add(Node);Node.Expanded=false;AddTree(Int32.Parse(Row["MenuID"].ToString()),Node);//再次递归}else{//添加当前节点的子节点Node.Text="<Litype='square'><spanonmousemove=javascript:title='"+Row["MenuName"].ToString()+"'>"+Row["MenuName"].ToString().Trim()+"</span></Li>";Node.NavigateUrl=Row["TargetURL"].ToString();Node.Target=Row["TargetWindow"].ToString();pNode.Nodes.Add(Node);Node.Expanded=false;AddTree(Int32.Parse(Row["MenuID"].ToString()),Node);//再次递归}}}catch{}}//调用,比如在Page_Load()事件中://调用递归函数,完成树形结构的生成this.AddTree(0,(TreeNode)null);

解决方案六:
循序递归啊。你还是看算法去啊
解决方案七:
类别与类别没有关联吗?最好创建关联。子父关系?
解决方案八:
递归添加!!!!
解决方案九:
学习
解决方案十:
///<summary>///递归添加树的节点///</summary>///<paramname="ParentID"></param>///<paramname="pNode"></param>publicvoidAddTree(intParentID,TreeNodepNode){DataSetds=(DataSet)this.ViewState["ds"];DataViewdvTree=newDataView(ds.Tables[0]);//过滤ParentID,得到当前的所有子节点dvTree.RowFilter="[parentId]="+ParentID;foreach(DataRowViewRowindvTree){TreeNodeNode=newTreeNode();if(pNode==null){//添加根节点Node.Text=Row["name"].ToString();TreeView1.Nodes.Add(Node);//Node.Expanded=false;//是否展开若设置为true则ExpandLevel="1"无效AddTree(Int32.Parse(Row["ID"].ToString()),Node);//再次递归}else{//添加当前节点的子节点Node.Text=Row["name"].ToString();//Node.Target=mainFrame;Node.NavigateUrl=Row["url"].ToString();pNode.Nodes.Add(Node);//Node.Expanded=false;AddTree(Int32.Parse(Row["ID"].ToString()),Node);//再次递归}}}}}

解决方案十一:
zc
解决方案十二:
publicvoidCondata()  //获取数据{empid=Session[OilPipe.PubInfo.PublicInfo.sEmpID].ToString();username=Session[OilPipe.PubInfo.PublicInfo.sUserName].ToString();StringBuildersb=newStringBuilder();if(Session[OilPipe.PubInfo.PublicInfo.sUserAdminFlag].ToString()=="Y"){sb.Append("SELECTDIR_IDDIR_ID,FATHER_IDFATHER_ID,DIR_NAMEDIR_NAME");sb.Append("FROMOP_DIRORDERBYDIR_ID");}else{sb.Append("SELECTDIR_IDDIR_ID,FATHER_IDFATHER_ID,DIR_NAMEDIR_NAME");sb.Append("FROMOP_DIR");sb.Append("WHEREfile_ctl.dir_aprv(dir_id,'"+empid+"','10')='Y'");sb.Append("ORDERBYDIR_ID");}stringsql=sb.ToString();DataSetds=dbop.ExecSQLReDataSet(sql);this.ViewState["ds"]=ds;AddTree(startnode,(TreeNode)null);}publicvoidAddTree(stringid,TreeNodepNode){DataSetds=(DataSet)this.ViewState["ds"];DataViewdv=newDataView(ds.Tables[0]);//取出数据填充数据视图dv.RowFilter="FATHER_ID='"+id+"'";//用数据视图进行子节点筛选把所有的子当前下的所有子节点筛选foreach(DataRowViewrowindv){TreeNodenode=newTreeNode();if(pNode==null)//说明是页节点{node.Text=row["DIR_NAME"].ToString();//从行视图中取出字段的值node.ToolTip=row["DIR_NAME"].ToString();node.NavigateUrl=url+"?dirId="+row["DIR_ID"].ToString();node.Target=target;TreeView1.Nodes.Add(node);//添加子节点AddTree(row["DIR_ID"].ToString(),node);//递归调用}else//如果子节点再继续递归{node.ToolTip=row["DIR_NAME"].ToString();node.Text=row["DIR_NAME"].ToString();node.NavigateUrl=url+"?dirId="+row["DIR_ID"].ToString();node.Target=target;pNode.ChildNodes.Add(node);AddTree(row["DIR_ID"].ToString(),node);}}}项目原版代码,我直接粘过来的
解决方案十三:
publicvoidInitTree(TreeViewtree,DataSetds,boolexpand){tree.Nodes.Clear();if(null==ds)return;if(ds.Tables.Count<=0)return;DataRow[]rowList=ds.Tables[0].Select(TableTree.FATHERID+"='-1'",TableTree.ORDERBY);foreach(DataRowrowinrowList){TreeNodenode=newTreeNode();node.Text=row[TableTree.DESN].ToString();node.NavigateUrl="MainManage.aspx?TableName="+row[TableTree.TABLENAME].ToString()+"&TreeID="+row[TableTree.TABLETREEID].ToString();node.Target="Main";node.Value=row[TableTree.TABLETREEID].ToString()+"|"+row[TableTree.TABLENAME].ToString();tree.Nodes.Add(node);CreateSubTree(node,ds,expand);}}///<summary>///创建树的子结点///</summary>publicvoidCreateSubTree(TreeNodeparentNode,DataSetds,boolexpand){stringvalue=parentNode.Value.Substring(0,parentNode.Value.IndexOf("|"));DataRow[]rowList=ds.Tables[0].Select(TableTree.FATHERID+"='"+value+"'",TableTree.ORDERBY);foreach(DataRowrowinrowList){TreeNodenode=newTreeNode();node.Text=row[TableTree.DESN].ToString();node.NavigateUrl="MainManage.aspx?TableName="+row[TableTree.TABLENAME].ToString()+"&TreeID="+row[TableTree.TABLETREEID].ToString();node.Target="Main";node.Value=row[TableTree.TABLETREEID].ToString()+"|"+row[TableTree.TABLENAME].ToString();parentNode.ChildNodes.Add(node);CreateSubTree(node,ds,expand);}}
解决方案十四:
上面代码都写了,没啥好写的了。楼主还不结帖?
解决方案十五:
如果类别代号是类似固定格式,可以先按代号排序,保证父在子前面,之后循环添加节点,可以不用递归,再建一个Hash表存类别代号和TreeNode的对应关系用来查找,可以更快一些.

时间: 2025-01-01 07:48:44

100分求treeview 用法代码的相关文章

100分求一段代码????万分感谢!!!

问题描述 如上图,部门和二级部门都是通过for循环得到的样式要生产这样,可以吗2个for循环要怎么写这段代码啊谁帮我写这段代码主要是TR,TD的布局,非常谢谢了..... 解决方案 解决方案二:看不到图....解决方案三:可以看到图吧....解决方案四:aaaaa1111111111111111aa2111111111111111aa3111111111111111bbbbb1111111111111111bb2111111111111111bb3111111111111111ccccc1111

[100分]求ms ajax中关于js 调用服务端代码的方法

问题描述 以前用AjaxPro好像很容易,但换成MsAjax后不知该怎么做.要能实现异步回传的,就是在页面中使用了UpdatePanel控件.我提问一般都是给100分的.知道的快来吧. 解决方案 解决方案二:没用过.解决方案三:该回复于2008-04-10 08:33:57被版主删除解决方案四:没用过.解决方案五:该回复于2008-04-10 08:33:55被版主删除解决方案六:我现在正在学一本书叫asp.netajax程序设计第II卷microsoftajaxlibrary异步通信层是陈黎夫

100分求汉语词组大全啊

问题描述 有个项目需要汉语词组大全,不知道哪位手头有这样的库呢?如果有的话,麻烦给一份yuanchuan2001@sina.com十分感谢,100分奉上 解决方案 解决方案二:jf解决方案三:顶顶,继续求-感谢哪位给一份解决方案四:帮楼主顶解决方案五:继续求--解决方案六:jf这个不是分能求来的解决方案七:痛苦,不知道如何能获得呢??

100分求一个随机数生成算法

问题描述 500000元分给1000000个人,每个人分0.18到88元,正好分完.请问如何使用算法实现? 解决方案 解决方案二:decimalsumMoney=500000m;//总金额intremainPerson=1000000;Dictionary<string,decimal>dicResult=newDictionary<string,decimal>();//存储分配结果voidPenny(){decimalmoney=0m;//每人分到的金额for(inti=0;i

■■■■ 100分求VB.net访问sql server2000数据库的封装类及其用法 ■■■■

问题描述 请大家提供给我一个访问sqlserver2000数据库的访问类,包括连接数据库.操作数据库(datatable,dataset)等.注意:1.连接数据库的字符串(数据库名称.登录名称.登录密码等)是从config.xml中提取的.也就是这个字符串不是写死在类库中的.2.请尽量提供完整的类库3.请说明如何使用这个类库小弟初学VB.net,请大家帮助!谢谢!我的另外一个帖子,不过已经结贴了.http://topic.csdn.net/u/20071106/16/c10246de-4bfa-

100分求C#和C++都能够加解密的代码

问题描述 我有一个DLL是用VC写的DES加密,但是用VC的DES加密后的密文用C#解密不了,因此很郁闷,只能把C++的DLL放到服务器上让C#来调,这样勉强解决,但后来又用的是免费空间了,人家不让用VC的DLL了,顺便说一下用的是常来网的免费空间http://web.99081.com/sysweb/RegTrans.aspx?CodeProvider=ymfhcn支持ASP.NET2.0,我本地调用VC的DLL是正常的,但在免费空间里就不行,因此求一个解决方案,让C++和c#都能够正常加解密

100分求C#改变QQ在线状态的代码

问题描述 由于一些原因,我需要在一台电脑上开20个QQ,每次都是1-10号QQ上线,11-20号下线,过一会,11-20号上线,1-10号下线.要实现这样的功能,必须我一个一个去上线或下线,非常麻烦.现在我想实现的是,写个WIN窗体,里面加个BUTTON按钮,点击一次,实现1-10号QQ上线,11-20号下线,再点击一次,11-20号上线,1-10号下线.不知道该怎么实现.请给出button的事件代码.用VS2010(C#)实现 解决方案 解决方案二:学习学习建议百度.解决方案三:你不是问过了么

100分求一个C++编写的简单UDP协议的SOCKET程序和源代码,基本功能就是能不断的发数字“21”

问题描述 具体要求,写一个服务器端的发送数据程序(UDP协议的SOCKET),要求能不断的广发21这个数字,要求能让我的客户端(这个SOCKET的客户端我已经有了)连上你的程序所listen的端口来接收这个你发送的数字21,要求程序尽量简单源代码尽量易读易懂.程序和代码都请用C++来写,谢谢了先.. 解决方案 解决方案二:小鸟也不会帮你顶一下解决方案三:tcpudp?解决方案四:#include<stdio.h>#include"winsock2.h"voidmain(){

100分求CustomValidator验证控件的问题

问题描述 上传图片,用的是服务器端控件FileUpload,想用CustomValidator验证图片上传的大小,不想在后台判断,请问代码应该怎么写啊,在此跪求了,图片上传大小控制在200k 解决方案 解决方案二:用CustomValidator来验证这个好像不好弄吧,你用JAVASCRIPT来控制呢百度里搜一下,有很多这样的资料的解决方案三:靠JShttp://blog.csdn.net/drago37net/archive/2006/09/12/1214938.aspx参考下...解决方案四