快速生成目录树(Oracle)


原来我生成目录树的方法是把表中的数据按某个条件读出来,然后在程序中通过递归生成目录树,如果节点超过1000个,速度会非常慢。最近找到一个好的方法:

假如目录树的表结构如下:

ID            ID
父ID         PID
节点名称 Text

第一步:查询数据。查询数据时,要使用Oracle自己的递归,语法如下:

SELECT ID,PID,TEXT FROM TABLETREE START WITH ID='0' CONNECT BY PID=PRIOR ID

如果有其它的条件可以在最后加上Where条件,递归的起始条件(Start With)可以有多个用And连接,如:(ID='0' And Text='aaa') 递归的条件也可以是多个,条件之间也用And连接。

用Oracle递归的特点是:查询的结果完全按照树节点从上到下的顺序排列。这样我们可以只遍历一次就能生成目录树了。

第二步:生成树目录。假设查询结构放在名字为table的DataTable里。

TreeNode parentNode = new TreeNode();

DataRow row = table.Rows[0];
TreeNode node = new TreeNode();
node.Tag = row["ID"].ToString();
node.Text = row["Text"].ToString();
_mainTree.Nodes.Add(node);
parentNode = node;

if(table.Rows.Count>0)
{
 for(int i=1;i<table.Rows.Count;i++)
 {
  row = table.Rows[i];
  string strPID = row["PID"].ToString();
  node = new TreeNode();
  node.Tag = row["ID"].ToString();
  node.Text = row["Text"].ToString();
  while(strPID != parentNode.Tag.ToString())
  {
   parentNode = parentNode.Parent;
  }
  parentnode.Nodes.Add(node);
  parentnode = node;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值