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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

ASP.NET無(wú)限分類

2019-11-18 17:20:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

開(kāi)始在網(wǎng)上查找到asp的無(wú)限分類,但是asp.net的幾乎找不到,找到的也是跟TreeView結(jié)合起來(lái)的.
找到asp版本的代碼有幾種,原來(lái)都差不多是采用遞歸算法.
其中表結(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))

另外一段代碼就跟上面原理就一樣的.只不過(guò)是加入了樹(shù)型結(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版本的無(wú)限分類.開(kāi)始遇到了語(yǔ)法上的限制.當(dāng)時(shí)的處理是直接把rs換成SqlDataReader,然后加以修改,代碼如下(錯(cuò)誤代碼):
測(cè)試數(shù)據(jù)庫(kù)的表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是不可以嵌套使用的.
后來(lái)我改成了用DataTable的形式實(shí)現(xiàn)了無(wú)限分類,但是感覺(jué)這種方式的效率不高,需要改進(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)了無(wú)限分類,但是效率還是挺低,努力探索更高的效率。


出處:P.Dragon's Blog


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 普宁市| 诏安县| 海门市| 灌云县| 舒兰市| 拜泉县| 镇赉县| 合肥市| 防城港市| 岳普湖县| 汤原县| 太和县| 九台市| 宝坻区| 满城县| 新疆| 永定县| 土默特右旗| 宜章县| 营口市| 玉林市| 土默特右旗| 北票市| 巴彦淖尔市| 安仁县| 桑植县| 德兴市| 繁昌县| 黎城县| 石家庄市| 肥城市| 礼泉县| 金昌市| 墨竹工卡县| 六枝特区| 辽源市| 屯留县| 马公市| 偏关县| 达日县| 青海省|