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

数据库的表数据如何加入到TREEVIEW控件中?

楼主zjh135(aaa)2005-02-01 15:21:57 在 .NET技术 / C# 提问

如这样的表:  
  名称               节点号  
  A省营销中心     01  
  A市中心           0101  
  B市中心           0102  
  C市中心           0103  
  A市A区             010101  
  C市A区             010301  
  B省营销中心     02  
  A市中心             0201  
  B市中心             0202  
  B市A区               0201  
  。。。           。。。  
  这样的表不知何根据‘节点号’加入到TREEVIEW控件中?大家帮一把!  
  问题点数:10、回复次数:17Top

1 楼aw_921(aw)回复于 2005-02-01 15:35:08 得分 0

我也想知道呀Top

2 楼rachy(黑色雨)回复于 2005-02-01 15:47:50 得分 2

生成树一般来说有两种方法,一种是深度优先搜索,一种是广度优先搜索  
  深度搜索如下:用方法递归得到所有节点  
  private   void   FullTreeList(TreeNode   ParentNode,int   ParentKey)  
  {  
  int   iDepID=0;  
  int   iParentID=0;  
  foreach(DataRow   dr   in   this.dtDep.Rows)  
  {  
  iDepID=int.Parse(dr["ID"].ToString   ());  
  iParentID=int.Parse(dr["UpperID"].ToString());  
   
  if(iParentID   ==ParentKey)  
  {  
  TreeNode   mNode=new   TreeNode();  
  mNode.Text=dr["DepartmentName"].ToString()   ;  
  mNode.Tag=iDepID;  
  mNode.Expand();  
  ParentNode.Nodes.Add(mNode);  
   
  //find   his   children  
  FullTreeList(mNode,(int)mNode.Tag);  
  }  
  }  
  }Top

3 楼zjh135(aaa)回复于 2005-02-01 16:38:40 得分 0

TO   RACHY:  
  我还是没有懂你的意思,能不能详细一点啊,谢谢!!Top

4 楼yuhan0001(雨涵)回复于 2005-02-01 17:04:46 得分 0

你可以先把数据生成XML格式,这样就非常好加入了Top

5 楼zjh135(aaa)回复于 2005-02-01 17:09:53 得分 0

TO   RACHY:  
  int   ParentKey,这个参数是什么啊?  
  TO   YUHAN0001;  
  能给个代码吗?Top

6 楼JafyLiu(自由的代价)回复于 2005-02-01 17:23:36 得分 1

数据循环内嵌套树的遍历(递归)。思路是,把数据一条条nodes.add到树上的合适位置。Top

7 楼JafyLiu(自由的代价)回复于 2005-02-01 17:26:26 得分 1

取数据时要记得排序,不然子来了找不到父。Top

8 楼renshenwawa397(人参娃娃)回复于 2005-02-02 09:03:01 得分 1

用递归是最好的方法!Top

9 楼douguangyao(咦,有间客栈!)回复于 2005-02-02 10:02:25 得分 1

Imports   System  
  Imports   System.Collections  
  Imports   System.ComponentModel  
  Imports   System.Data  
  Imports   System.Web  
  Imports   System.Web.SessionState  
  Imports   System.Web.UI  
  Imports   System.Web.UI.HtmlControls  
  Imports   System.Web.UI.WebControls  
  Imports   System.Data.SqlClient  
  Imports   System.Configuration  
  Imports   Microsoft.Web.UI.WebControls  
   
    Dim   conn   As   New   SqlConnection  
          Dim   mycmd   As   New   SqlDataAdapter  
          Dim   ds   As   DataSet  
          Dim   cmdSelect   As   String  
   
          Protected   WithEvents   TVMenu   As   Microsoft.Web.UI.WebControls.TreeView  
   
      Private   Sub   Page_Load(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Load  
                  '在此处放置初始化页的用户代码  
                  conn   =   New   SqlConnection(ConfigurationSettings.AppSettings("SQLConnString1"))  
                  'conn.ConnectionString   =   Application("SQLConnString1")  
                  CreateDataSet()  
                  InitTree(TVMenu.Nodes,   "0")  
   
          End   Sub  
   
      Private   Function   CreateDataSet()   As   DataSet  
                  cmdSelect   =   "select   *   from   S_Menu"  
                  mycmd   =   New   SqlDataAdapter(cmdSelect,   conn)  
                  ds   =   New   DataSet  
                  mycmd.Fill(ds,   "s_menu")  
                  Return   ds  
   
          End   Function  
          Private   Sub   InitTree(ByVal   Nds   As   TreeNodeCollection,   ByVal   parentId   As   String)  
   
                    Dim   dv   As   New   DataView  
                  Dim   tmpNd   As   TreeNode  
                  Dim   intId   As   String  
                  Dim   drv   As   DataRowView  
                  dv.Table   =   ds.Tables("tree")  
                  dv.RowFilter   =   "ParentId='"   +   parentId   +   "'"  
                  For   Each   drv   In   dv  
   
                          tmpNd   =   New   TreeNode  
                          tmpNd.ID   =   drv("NodeId").ToString()  
                          tmpNd.Text   =   drv("NodeName").ToString()  
                          tmpNd.ImageUrl   =   "../images/"   +   drv("Icon").ToString()  
                          tmpNd.NavigateUrl   =   "../"   +   drv("Address").ToString()  
                          Nds.Add(tmpNd)  
                          intId   =   drv("ParentId").ToString()  
                          InitTree(tmpNd.Nodes,   tmpNd.ID)  
                  Next  
          End   Sub  
  Top

10 楼douguangyao(咦,有间客栈!)回复于 2005-02-02 10:03:49 得分 0

不知道为什么程序执行到For   Each   语句的时候  
  不执行下面的,直接跳到next,  
  共同关注!!!!Top

11 楼zjh135(aaa)回复于 2005-02-02 11:06:41 得分 0

//   递归添加树的节点  
  public   void   AddTree(int   ParentID,TreeNode   pNode)    
  {  
  DataView   dvTree   =   new   DataView(ds.Tables[0]);  
  //过滤ParentID,得到当前的所有子节点  
  string   Fstr=   "[PARENTID]   =   "   +   ParentID;//  
  dvTree.RowFilter   =   Fstr;  
  MessageBox.Show(Fstr);  
  foreach(DataRowView   Row   in   dvTree)    
  {  
  if(pNode   ==   null)    
  {         //'̀添加根节点  
  TreeNode   Node   =   treeView1.Nodes.Add(Row["ConText"].ToString());  
  AddTree(Int32.Parse(Row["ID"].ToString()),Node);         //再次递归  
  }    
  else    
  {       //添加当前节点的子节点  
  TreeNode   Node   =     pNode.Nodes.Add(Row["ConText"].ToString());  
  AddTree(Int32.Parse(Row["ID"].ToString()),Node);           //再次递归  
  }  
  }                                        
  }                          
   
  我找到一些代码,这个代码不好理解?大家帮一下Top

12 楼douguangyao(咦,有间客栈!)回复于 2005-02-02 11:16:20 得分 2

private   void   InitTree(TreeNodeCollection   Nds,string   parentId)  
  {  
        DataView   dv=new   DataView();  
        TreeNode   tmpNd;  
        string   intId;  
        dv.Table=ds.Tables["S_Menu"];  
        dv.RowFilter="ParentId='"   +   parentId   +   "'"   ;  
        foreach(DataRowView   drv   in   dv)  
              {  
                    tmpNd=new   TreeNode();  
                    tmpNd.ID=drv["NodeId"].ToString();  
  tmpNd.Text=drv["NodeName"].ToString();  
  tmpNd.ImageUrl="../images/"+drv["Icon"].ToString();  
  tmpNd.NavigateUrl="../"+drv["Address"].ToString();  
  Nds.Add(tmpNd);  
  intId=drv["ParentId"].ToString();  
  InitTree(tmpNd.Nodes,tmpNd.ID);  
  }  
  }  
  我想问问大家,为什么我的程序执行到foreach的时候就跳出来阿  
  快帮帮忙Top

13 楼douguangyao(咦,有间客栈!)回复于 2005-02-03 09:51:35 得分 1

我知道了,  
  dv.RowFilter="ParentId='"   +   parentId   +   "'"   ;  
  这句多了两个单引号,  
  楼主你的弄好了没阿Top

14 楼zjh135(aaa)回复于 2005-02-03 10:29:46 得分 0

TO:douguangyao  
  怎么用你的InitTree这个过程啊??对于递归有点不明白Top

15 楼zjh135(aaa)回复于 2005-02-03 10:36:39 得分 0

dv.RowFilter="ParentId='"   +   parentId   +   "'"   ;  
  这句的过滤条件在执行时不能确定是那一层次的NODE,唉。。。Top

16 楼zjh135(aaa)回复于 2005-02-03 10:40:42 得分 0

那位能把‘小学生’的代码,改为循环语名呢??Top

17 楼gatr()回复于 2005-02-03 11:06:46 得分 1

一个一个读出来再加到适当位置就可以了Top

相关问题

  • 关于数据库与Treeview控件
  • 网上有没有winform下的treeview控件绑定数据库表的例子。
  • VB中treeview控件 怎么样和ACCESS数据库中的表关联
  • 如何读取数据库表记录并填充到treeview控件?
  • treeview控件如何与数据库中的表关联(新手勿笑)
  • 如何读取数据库表记录并填充到treeview控件?(要vb.net版本的)
  • TreeView控件显示数据库中数据怎么不行啊!
  • 多级部门,Treeview控件与数据库关联
  • Treeview控件连接数据库的问题
  • treeview控件怎么加载数据库中的数据

关键词

  • 节点
  • dv
  • 代码
  • 数据
  • ds
  • mnode
  • tmpnd
  • 递归
  • parentid
  • treenode

得分解答快速导航

  • 帖主:zjh135
  • rachy
  • JafyLiu
  • JafyLiu
  • renshenwawa397
  • douguangyao
  • douguangyao
  • douguangyao
  • gatr

相关链接

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

广告也精彩

反馈

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