ASP.NET无限分类

asp.net

开始在网上查找到asp的无限分类,但是asp.net的几乎找不到,找到的也是跟TreeView结合起来的.
找到asp版本的代码有几种,原来都差不多是采用递归算法.
其中表结构都是如下:
表名称是ClassName
id                     主键
sid                    对应的父类的id
ClassName        对应类别的名称.
代码段一:
1function loadNextType(upid,rank)
2    dim rs
3    set rs="select * from classname where sid="&upid
4    do while not rs.eof
5       loadNextType=loadNextType &rs("ClassName")&"<br>"& string("-",rank) & loadNextType(rs("id"),rank+1)
6       rs.movenext
7    loop
8end function调用时:response.write(loadNextType(0,0))

另外一段代码就跟上面原理就一样的.只不过是加入了树型结构的显示方式.
代码段二:
 1'定义第一级分类
 2sub mainfl()
 3       dim rs
 4       set rs=conn.execute("select id,F_id,F_name from ClassNae where sid=0 order by id desc")
 5       if not rs.eof then
 6          do while not rs.eof
 7          response.write rs(2) & "<br>"
 8          call subfl(rs(0),"  |-") '循环子级分类
 9          rs.movenext
10          if rs.eof then exit do '防上造成死循环
11          loop
12          end if
13end sub
14'定义子级分类
15sub subfl(fid,strdis)
16       dim rs1
17       set rs1=conn.execute("select id,sid,ClassName from ClassName where sid="&fid&" order by id desc")
18       if not rs1.eof then
19       do while not rs1.eof
20       response.write rs1(2) & "<br>"
21       call subfl(rs1(0),"  "&strdis) '递归子级分类
22       rs1.movenext
23       if rs1.eof then
24       rs1.close
25       exit sub
26       end if
27       loop
28       end if
29end sub
我参考上面的代码改成了asp.net版本的无限分类.开始遇到了语法上的限制.当时的处理是直接把rs换成SqlDataReader,然后加以修改,代码如下(错误代码):
测试数据库的表Tree结构是:id,ParentID,Name。
 1private void Display(string parentid/**//*, int rank*/)
 2    {
 3        SqlDataReader dr;
 4        SqlCommand cmd;
 5        String strSQL;
 6
 7        strSQL = "Select * From Tree Where ParentID =" + parentid + "Order By ID DESC";
 8        cmd = new SqlCommand(strSQL,conn);
 9        //cmd.Connection.Open();
10
11        using(dr = cmd.ExecuteReader())
12        {
13            while(dr.Read())
14            {
15                Response.Write(dr["Name"].ToString() + "<br>");
16                Display(dr["ID"].ToString());
17            }
18        }
19        cmd.Connection.Close();
20    }调用使用Display("0").
错误原因是SqlDataReader每次使用之后都需要关闭,所以DataReader是不可以嵌套使用的.
后来我改成了用DataTable的形式实现了无限分类,但是感觉这种方式的效率不高,需要改进(还在研究中)
修改后的代码如下:
 1private void Display(string parentid, String space)
 2    {
 3        DataTable dt;
 4        String strSQL;
 5        strSQL = "Select * From Tree Where ParentID =" + parentid + " Order By ID DESC";
 6
 7        SqlDataAdapter sda = new SqlDataAdapter(strSQL, conn);
 8        DataSet ds = new DataSet();
 9        sda.Fill(ds, "Tree");
10        dt = ds.Tables["Tree"];
11
12        if (dt.Rows.Count > 0)
13        {
14            foreach (DataRow dr in dt.Rows)
15            {
16                strOpinion += space + "<font color=red>[" + dr["Name"].ToString() +"<br>";
17                Display(dr["ID"].ToString(), "            " + space, false);
18            }
19        }
20    }调用时候使用Display("0","↓→→")。
虽然是实现了无限分类,但是效率还是挺低,努力探索更高的效率。

出处:P.Dragon's Blog

时间: 2024-10-24 14:17:03

ASP.NET无限分类的相关文章

asp.net 无限分类第1/3页_实用技巧

1.递归函数 //  '递归遍历自建目录树=============================================================================   private void ShowDir(string sZml,string sIndex)   {    System.Data.SqlClient.SqlConnection sqlCon=new System.Data.SqlClient.SqlConnection(connectionS

Asp.Net实现无限分类生成表格的方法(后台自定义输出table)_实用技巧

本文实例讲述了Asp.Net实现无限分类生成表格的方法.分享给大家供大家参考,具体如下: 数据结构 monitor_group monitor_grp_id      monitor_grp_name     parent_id       level               childCount       orderby [int,自动递增]           [nvarchar,not null]      [int,not null]  [int,not null]   [int,

ASP实例教程:asp无限级显示分类代码

为了方便使用分类,我定义了一个分类表category,里面字段是id(自动编号)  cat_name(分类名) parent_id(父ID,对应本表ID) cat_order(顺序) is_show(是否显示)  u_id(这个用来区别是新闻分类,还是产品分类,还是其他分类),为了方便,我将这些分类全部放在这张表中.在给客户添加分类的时候,结果有太多的分类,本来前台显示的时候,将它们全部显示出来了,好长.客户提出修改意见,要求将它们改成点击大分类,才可以将其子分类显示出来,并且每个分类下面还有一

一棵php的类树(支持无限分类)

最近问无限分类的类树问题比较多,所以一高兴自己写了一个,我刚写完的,大家用用看,看看怎么实现起来更快,更简单,把你的树也贴出来(要只查询一次数据库的)<br> 这是一棵分类列表的类树, 支持无限分类<br> 一个分类下面可以同时有"包含子类的分类"和"最终分类";<br> 唯一的优点是*****只需要进行一次的数据库*****查询.<br> 样子不是很好看,不过可以自定义修改,可以自己定义css加里面<br>

php无限分类, 支持输出树状图

<?php /** * 通用的树型类,可以生成任何树型结构 */ class tree { /** * 生成树型结构所需要的2维数组 * @var array */ var $arr = array(); /** * 生成树型结构所需修饰符号,可以换成图片 * @var array */ var $icon = array('│','├','└'); /** * @access private */ var $ret = ''; /** * 构造函数,初始化类 * @param array 2维

PHP无限分类-PHP100代码篇

  <?php  //无限分类,从子类找所有父类 //$id 子类ID  function php100_xd($id){    $sql="select * from fl where id='$id'";    $q=mysql_query($sql);    $rs=mysql_fetch_array($q);    $rs['fid']==0 ? "" : fl($rs['fid']);    echo $rs['name']."-"

ASP把无限级分类生成数组

数组 把无限级分类循环出来确实是一件头疼的事情.比如,我们要循环出一个SELECT,或一个TABLE,要写一大堆判断.有没好点的办法呢?我的做法是生成数组,可以重复调用,直接循环数组就行了.为了方便,我把它写成了类. class.asp 返回所有分类的数组,并按顺序排列有4个属性:set aa=new classlistaa.id="id"//编号的名称aa.classname="classname"//分类名称aa.pid="pid"//父ID

php 进阶:实现无限分类(4)

4.路径跟踪 ------------------------------------------------------------ 前面已经介绍过了分类的创建实现方法,在分类表里记载了 rout_id 和 rout_char 这两个存储分类路径的信息,在不做任何处理的情况下,程序只能够顺序下到最底层的分类而无法倒退(当然可利用浏览器的 back 键倒退,但这对程序来说是不完整的),因此必须将 rout_id 和 rout_char 的信息分解出来完成实在的路径指示. 具体的做法,假如数据库记

php 进阶:实现无限分类(3)

3.程序控制 ------------------------------------------------------------ 实现无限分类这个功能中就属这一步最为复杂辛苦,首先看看程序需要完成的步骤: 1)创建分类上传; 2)创建信息上传; 3)明确显示各分类及其之间的关系; 4)处理查询功能; 5)如何处理编辑和删除的功能; 而这五步中最为困难的就是第五个步骤,因为对分类的编辑和删除涉及到一至性的问题. 下面我就逐一描述 php 的程序控制: 1)创建分类上传 在介绍这个功能前,先介