CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

关于根据一个固定的表的格式来动态生成树的问题,100求解急~~~~~

楼主solsolsol(秋水萧萧 认真思考每个问题,帮人也是一种学习)2005-07-19 13:49:01 在 .NET技术 / ASP.NET 提问

根结点为固定的   以“跟结点”为例作为text  
  表结构如下  
  一级目录         二级目录           三级目录           一级ID             二级ID             三级ID  
  库1                   组1                     1#                       ID                       ID                   ID  
  库1                   组1                     2#                       ID                       ID                   ID  
  …………  
  库1                   组2                     1#                       ID                       ID                   ID  
  库1                   组2                     2#                       ID                       ID                   ID  
  …………  
  库2                   组1                     1#                       ID                       ID                   ID  
  库2                   组1                     2#                       ID                       ID                   ID  
  …………  
  库2                   组2                     1#                       ID                       ID                   ID  
  库2                   组2                     2#                       ID                       ID                   ID  
  …………  
   
  树里面显示名称  
  单击三级目录时获得一级ID和三级ID  
   
   
  我的思路是逐行取数据  
   
  先遍历树一级目录    
  add1()  
  {  
          if(一级目录存在)  
          {  
                  是:遍历子树   ;  
                  当前目录下add2()   ;    
          }  
          else  
          {  
                  否:ADD(一级目录);  
                  新建目录下add2();  
          }  
  }  
   
   
  add2()  
  {  
          if(二级存在)  
          {  
                  是:当前目录下ADD(三级目录)  
          }    
          else  
          {  
                  否:ADD(二级目录)      
                  新建二级目录下ADD(三级目录)      
          }      
  }  
   
  虽然思路通了,但是水平有限,不能用代码写出来  
  求代码  
   
  或者有其他现成方法+代码更好 问题点数:100、回复次数:13Top

1 楼lr2651(戎 The Two Towers)回复于 2005-07-19 14:18:18 得分 20

用TreeView控件Top

2 楼solsolsol(秋水萧萧 认真思考每个问题,帮人也是一种学习)回复于 2005-07-19 14:29:29 得分 0

回楼上的:知道用控件  
  一般递归实现的话表的结构都是这样的  
  编号       父编号           名称  
   
  我的表的结构是那样的变不了了Top

3 楼solsolsol(秋水萧萧 认真思考每个问题,帮人也是一种学习)回复于 2005-07-19 17:42:54 得分 0

基本解决。。。。。  
  散分啦~~~Top

4 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-07-19 18:11:15 得分 15

我接Top

5 楼solsolsol(秋水萧萧 认真思考每个问题,帮人也是一种学习)回复于 2005-07-20 08:42:28 得分 0

。。。。。。。  
  这都没人接啊~~~~~Top

6 楼ye_zi(行到水穷处·坐看云起时)回复于 2005-07-20 17:31:06 得分 15

楼主好人,应该接一下!Top

7 楼chenyun_424(求教的人)回复于 2005-07-20 17:41:47 得分 15

接分哦!~Top

8 楼jimu8130(火箭的未来在哪里?)回复于 2005-07-20 17:56:15 得分 15

希望能贴出代码,让人学习咯,顺便接分Top

9 楼solsolsol(秋水萧萧 认真思考每个问题,帮人也是一种学习)回复于 2005-07-21 09:02:30 得分 0

恩  
  贴代码  
  先把我的表的格式写出来  
  tcan表  
  ccancode   (罐号)         coillibrarycode(库号)             cname(罐名)  
   
  tcangroup   表  
  ccangroupcode   (组号)     coillibrarycode       cname(组名)  
   
  tcangruopcanmap  
  ccangroupcode               ccancode  
   
   
  我的方法是生成如下的表再递归  
  ID       PID(父编号)     组N       罐N       URL  
   
  Top

10 楼solsolsol(秋水萧萧 认真思考每个问题,帮人也是一种学习)回复于 2005-07-21 09:03:26 得分 0

 
  using   Microsoft.Web.UI.WebControls;  
  using   MySql.Data.MySqlClient;  
   
   
  namespace   youkuzidong  
  {  
  ///   <summary>  
  ///   left   的摘要说明。  
  ///   </summary>  
  public   class   left   :   System.Web.UI.Page  
  {  
  protected   System.Web.UI.WebControls.Label   Label1;  
  protected   DataTable   treeTable   =   new   DataTable();  
  protected   System.Web.UI.WebControls.DataGrid   DataGrid1;  
  protected   Microsoft.Web.UI.WebControls.TreeView   TreeView2;  
  protected   DataTable   tempTable   =   new   DataTable();  
  private   string   treestr="";  
   
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  //this.treeTable   =   new   DataTable();  
  //   在此处放置用户代码以初始化页面  
  InitTreeTable();  
   
  InitTempTable();  
  AddToTempTable();  
   
  AddGroupToTreeTable();  
  AddCanToTreeTable();  
   
  this.DataGrid1.DataSource   =   this.treeTable.DefaultView;  
  this.DataGrid1.DataBind();//检验treeTable是否正确   无其他用处  
   
   
  AddTree(-1,   (TreeNode)null);  
  //Add(-1);  
  }  
   
  private   void   InitTreeTable()  
  {  
  DataColumn   dc   =   new   DataColumn(   "ID"   );  
  dc.DataType   =   typeof(   int   );  
  this.treeTable.Columns.Add(   dc   );  
   
  dc   =   new   DataColumn(   "PID"   );  
  dc.DataType   =   typeof(   int   );  
  this.treeTable.Columns.Add(   dc   );  
   
  dc   =   new   DataColumn(   "Name"   );  
  dc.DataType   =   typeof(   string   );  
  this.treeTable.Columns.Add(   dc   );  
   
  dc   =   new   DataColumn(   "URL"   );  
  dc.DataType   =   typeof(   string   );  
  this.treeTable.Columns.Add(   dc   );  
   
   
  DataRow   dr0   =   this.treeTable.NewRow();  
  DataRow   dr1   =   this.treeTable.NewRow();  
  DataRow   dr2   =   this.treeTable.NewRow();  
   
  this.treeTable.Rows.Add(   dr0   );  
  this.treeTable.Rows[   0   ][   "ID"   ]   =   0;  
  this.treeTable.Rows[   0   ][   "PID"   ]   =   -1;  
  this.treeTable.Rows[   0   ][   "Name"   ]   =   "****";  
  this.treeTable.Rows[   0   ][   "URL"   ]   =   DBNull.Value;  
   
  this.treeTable.Rows.Add(   dr1   );  
  this.treeTable.Rows[   1   ][   "ID"   ]   =   1;  
  this.treeTable.Rows[   1   ][   "PID"   ]   =   0;  
  this.treeTable.Rows[   1   ][   "Name"   ]   =   "****";  
  this.treeTable.Rows[   1   ][   "URL"   ]   =   DBNull.Value;  
   
  this.treeTable.Rows.Add(   dr2   );  
  this.treeTable.Rows[   2   ][   "ID"   ]   =   2;  
  this.treeTable.Rows[   2   ][   "PID"   ]   =   0;  
  this.treeTable.Rows[   2   ][   "Name"   ]   =   "****";  
  this.treeTable.Rows[   2   ][   "URL"   ]   =   DBNull.Value;  
  }  
   
   
  private   void   InitTempTable()  
  {  
  DataColumn   dc   =   new   DataColumn(   "库C"   );  
  dc.DataType   =   typeof(   int   );  
  this.tempTable.Columns.Add(   dc   );  
   
  dc   =   new   DataColumn(   "罐C"   );  
  dc.DataType   =   typeof(   int   );  
  this.tempTable.Columns.Add(   dc   );  
   
  dc   =   new   DataColumn(   "组N"   );  
  dc.DataType   =   typeof(   string   );  
  this.tempTable.Columns.Add(   dc   );  
   
  dc   =   new   DataColumn(   "罐N"   );  
  dc.DataType   =   typeof(   string   );  
  this.tempTable.Columns.Add(   dc   );  
  }  
   
   
  private   void   AddToTempTable()  
  {  
  MySqlConnection   myConn   =   new   MySqlConnection(ConfigurationSettings.AppSettings["ConnString"]);  
  string   strCmd1   =   "select   COilLibraryCode,CCanCode,CName   from   tcan";  
  MySqlDataAdapter   da1   =   new   MySqlDataAdapter(strCmd1,myConn);  
  DataSet   ds   =   new   DataSet();  
  da1.Fill(ds,"table");  
   
  for(int   i   =   0;   i<ds.Tables["table"].Rows.Count;   i++)  
  {  
  DataRow   dr   =   this.tempTable.NewRow();  
  this.tempTable.Rows.Add(dr);  
  this.tempTable.Rows[   i   ][   "库C"   ]   =   ds.Tables["table"].Rows[i][0].ToString();  
  this.tempTable.Rows[   i   ][   "罐C"   ]   =   ds.Tables[   "table"   ].Rows[i][1].ToString();  
   
  this.tempTable.Rows[   i   ][   "罐N"   ]   =   ds.Tables[   "table"   ].Rows[i][2].ToString();  
   
  string   strCmd2   =   "select   CCanGroupCode   from   tcangroupcanmap   where   CCanCode   =   "   +   this.tempTable.Rows[   i   ][   "罐C"   ].ToString();  
  MySqlDataAdapter   da2   =   new   MySqlDataAdapter(strCmd2,myConn);  
  da2.Fill(ds,"temp1");  
   
  string   strCmd3   =   "select   CName   from   tcangroup   where   CCanGroupCode   =   "   +   ds.Tables["temp1"].Rows[i][0].ToString();  
  MySqlDataAdapter   da3   =   new   MySqlDataAdapter(strCmd3,myConn);  
  da3.Fill(ds,"temp2");  
   
  string   str   =   ds.Tables["temp2"].Rows[i][0].ToString();  
  this.tempTable.Rows[   i   ][   "组N"   ]   =   ds.Tables["temp2"].Rows[i][0].ToString();  
  }  
  }  
   
   
  private   void   AddGroupToTreeTable()  
  {  
  MySqlConnection   myConn   =   new   MySqlConnection(ConfigurationSettings.AppSettings["ConnString"]);  
  string   strCmd   =   "select   tcangroup.COilLibraryCode,tcangroup.CName   from   tcangroup";//   where   tcangroup.COilLibrayCode=toillibrary.COilLibrayCode   and   toillibrary.CRegionCode=1";  
  MySqlDataAdapter   da   =   new   MySqlDataAdapter(strCmd,myConn);  
  DataSet   ds   =   new   DataSet();  
  da.Fill(ds,"group");  
   
   
   
  for(int   i   =   0;   i<ds.Tables["group"].Rows.Count;   i++)  
  {  
  DataRow   dr   =   this.treeTable.NewRow();  
  this.treeTable.Rows.Add(dr);  
  int   temp   =   this.treeTable.Rows.Count;  
  this.treeTable.Rows[   i+3   ][   "ID"   ]   =   i+3;  
  this.treeTable.Rows[   i+3   ][   "PID"   ]   =   ds.Tables[   "group"   ].Rows[i][0].ToString();  
  this.treeTable.Rows[   i+3   ][   "Name"   ]   =   ds.Tables[   "group"   ].Rows[i][1].ToString();  
  this.treeTable.Rows[   i+3   ][   "URL"   ]   =   DBNull.Value;  
  }  
   
  }  
   
   
  private   void   AddCanToTreeTable()  
  {  
  for(int   i   =   0;   i<this.tempTable.Rows.Count;   i++)  
  {  
  int   treeTableRows   =   this.treeTable.Rows.Count;  
  for(int   j   =   0;   j<this.treeTable.Rows.Count;   j++)  
  {  
  string   t1   =   this.tempTable.Rows[i][0].ToString();  
  string   t2   =   this.treeTable.Rows[j][1].ToString();  
  string   t3   =   this.tempTable.Rows[i][2].ToString();  
  string   t4   =   this.treeTable.Rows[j][2].ToString();  
  if(t1==t2&&t3==t4)  
  //if(this.tempTable.Rows[i][0]==this.treeTable.Rows[j][1]&&this.tempTable.Rows[i][2]==this.treeTable.Rows[j][2])  
  {  
  DataRow   dr   =   this.treeTable.NewRow();  
  this.treeTable.Rows.Add(dr);  
  int   temp   =   this.treeTable.Rows.Count   -   1;  
  this.treeTable.Rows[   treeTableRows   ][   "ID"   ]   =   treeTableRows;  
  this.treeTable.Rows[   treeTableRows   ][   "PID"   ]   =   this.treeTable.Rows[j][0].ToString();  
  this.treeTable.Rows[   treeTableRows   ][   "Name"   ]   =   this.tempTable.Rows[i][3].ToString();  
  this.treeTable.Rows[   treeTableRows   ][   "URL"   ]   =   "./default.aspx";  
   
  break;  
  }  
   
  }  
  }  
  }  
   
   
  public   void   AddTree(int   PID,TreeNode   pNode)    
  {  
   
  DataView   dvTree   =   new   DataView(this.treeTable);  
   
  dvTree.RowFilter   =     "[PID]   =   "   +   PID;  
   
  foreach(DataRowView   Row   in   dvTree)    
  {  
  TreeNode   Node=new   TreeNode()   ;  
  if(pNode   ==   null)    
  {          
  //添加根结点  
  Node.Text   =   Row["Name"].ToString();  
  TreeView2.Nodes.Add(Node);  
  Node.Expanded=true;  
  Node.NavigateUrl   =   Row["URL"].ToString();  
  Node.Target   =   "right";  
  AddTree(Int32.Parse(Row["ID"].ToString()),   Node);        
  }    
  else    
  {        
  //添加当前结点子结点  
  Node.Text   =   Row["Name"].ToString();  
  pNode.Nodes.Add(Node);  
  Node.Expanded   =   true;  
  Node.NavigateUrl   =   Row["URL"].ToString();  
  Node.Target   =   "right";  
  AddTree(Int32.Parse(Row["ID"].ToString()),Node);            
  }  
  }                                        
  }            
   
   
   
   
  #region   Web   窗体设计器生成的代码  
  override   protected   void   OnInit(EventArgs   e)  
  {  
  //  
  //   CODEGEN:   该调用是   ASP.NET   Web   窗体设计器所必需的。  
  //  
  InitializeComponent();  
  base.OnInit(e);  
  }  
   
  ///   <summary>  
  ///   设计器支持所需的方法   -   不要使用代码编辑器修改  
  ///   此方法的内容。  
  ///   </summary>  
  private   void   InitializeComponent()  
  {          
  this.Load   +=   new   System.EventHandler(this.Page_Load);  
   
  }  
  #endregion  
  }  
  }  
   
  方法是笨,不过实现了总是好事  
  慢慢再想怎么才能改进Top

11 楼codeangel(http://www.wSoft.Net)回复于 2005-07-21 09:23:44 得分 20

呵呵,楼主好样的  
  自已动手,丰衣足食。Top

12 楼codeangel(http://www.wSoft.Net)回复于 2005-07-21 09:28:52 得分 0

最好用递归,可以无限级,  
  你这样写有点死了,网上很多示例,go   search!Top

13 楼solsolsol(秋水萧萧 认真思考每个问题,帮人也是一种学习)回复于 2005-07-21 12:06:53 得分 0

我觉得楼上的没看全吧?  
  用的就是递归  
  Top

相关问题

  • 用JSP生成excel格式的报表难吗?
  • 求输入法生成器码表原文件格式
  • 如何用Excel生成带分组格式的报表
  • 对象生成问题求解
  • csdn菜单树生成方法求解
  • 生成问题,高分求解
  • 水晶报表导出Excel格式变了阿?求解决方案
  • [高分求解]如何在一个表单中读取另一个表单生成的文档里的域值
  • 关于生成EXCEL报表的高难问题.求解决方案.高手请进!分数不是问题!!!
  • xml文件生成格式

关键词

  • 代码
  • dc
  • 结构
  • datagrid
  • treetable
  • 目录
  • 递归
  • 表
  • 组
  • 三级

得分解答快速导航

  • 帖主:solsolsol
  • lr2651
  • lovefootball
  • ye_zi
  • chenyun_424
  • jimu8130
  • codeangel

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo