国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET無限分類

2024-07-10 13:11:28
字體:
供稿:網(wǎng)友

開始在網(wǎng)上查找到asp的無限分類,但是asp.net的幾乎找不到,找到的也是跟treeview結(jié)合起來的.
找到asp版本的代碼有幾種,原來都差不多是采用遞歸算法.
其中表結(jié)構(gòu)都是如下:
表名稱是classname
id                     主鍵
sid                    對(duì)應(yīng)的父類的id
classname        對(duì)應(yīng)類別的名稱.
代碼段一:
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調(diào)用時(shí):response.write(loadnexttype(0,0))

另外一段代碼就跟上面原理就一樣的.只不過是加入了樹型結(jié)構(gòu)的顯示方式.
代碼段二:
 1'定義第一級(jí)分類
 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),"  |-") '循環(huán)子級(jí)分類
 9          rs.movenext
10          if rs.eof then exit do '防上造成死循環(huán)
11          loop
12          end if
13end sub
14'定義子級(jí)分類
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) '遞歸子級(jí)分類
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版本的無限分類.開始遇到了語法上的限制.當(dāng)時(shí)的處理是直接把rs換成sqldatareader,然后加以修改,代碼如下(錯(cuò)誤代碼):
測(cè)試數(shù)據(jù)庫的表tree結(jié)構(gòu)是: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    }調(diào)用使用display("0").
錯(cuò)誤原因是sqldatareader每次使用之后都需要關(guān)閉,所以datareader是不可以嵌套使用的.
后來我改成了用datatable的形式實(shí)現(xiàn)了無限分類,但是感覺這種方式的效率不高,需要改進(jìn)(還在研究中)
修改后的代碼如下:
 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(), "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + space, false);
18            }
19        }
20    }調(diào)用時(shí)候使用display("0","↓→→")。
雖然是實(shí)現(xiàn)了無限分類,但是效率還是挺低,努力探索更高的效率。

出處:p.dragon's blog

國內(nèi)最大的酷站演示中心!
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 讷河市| 武宁县| 旺苍县| 潞城市| 高陵县| 杨浦区| 万源市| 蒲江县| 长岛县| 咸丰县| 安徽省| 定南县| 福海县| 铁岭市| 车致| 文水县| 湖北省| 巢湖市| 云南省| 霍山县| 收藏| 大邑县| 西贡区| 柳州市| 奉化市| 建瓯市| 南岸区| 临海市| 武功县| 调兵山市| 宣化县| 武义县| 平乐县| 宁明县| 武胜县| 句容市| 正宁县| 新蔡县| 安宁市| 嘉黎县| 赞皇县|