无限分类

来源:互联网 发布:java 递归二分法 编辑:程序博客网 时间:2024/04/28 00:25

ASP.NET无限分类

<script type="text/javascript"><!--google_ad_client = "pub-1962657149275668";google_ad_width = 728;google_ad_height = 90;google_ad_format = "728x90_as";google_ad_type = "text_image";//2006-12-16: 上边google_ad_channel = "3842754409";google_color_border = "F4F4F4";google_color_bg = "F4F4F4";google_color_link = "0000FF";google_color_text = "000000";google_color_url = "008000";//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script><iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-1962657149275668&amp;dt=1178674165859&amp;lmt=1178674165&amp;format=728x90_as&amp;output=html&amp;channel=3842754409&amp;url=http%3A%2F%2Fwww.leafweb.cn%2Farticle.asp%3FID%3D1416%26pages%3D2&amp;color_bg=F4F4F4&amp;color_text=000000&amp;color_link=0000FF&amp;color_url=008000&amp;color_border=F4F4F4&amp;ad_type=text_image&amp;ref=http%3A%2F%2Fwww.google.cn%2Fsearch%3Fcomplete%3D1%26hl%3Dzh-CN%26newwindow%3D1%26q%3Dasp.net%2B%25E6%2597%25A0%25E9%2599%2590%25E5%2588%2586%25E7%25B1%25BB%26meta%3D&amp;cc=100&amp;flash=9&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_java=true" frameborder="0" width="728" scrolling="no" height="90" allowtransparency="allowtransparency"></iframe>

我参考上面的代码改成了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(), "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + space, false);
18            }

19        }

20    }
调用时候使用Display("0","↓→→")。
虽然是实现了无限分类,但是效率还是挺低,努力探索更高的效率。