[ASP.NET]樹狀顯示(子→父)

摘要:[ASP.NET]樹狀顯示(子→父)

這幾天因應公司需求!!想到得一個寫法...

也許各位大大都已經有更好的方法!!..但就分享出來...

假設我們現在已經在某一個子類別!!想要找他的父類別到最終的根類別...顯示在上面

就像YAHOO拍賣一樣!!假設我再看YAMAHA的重機

我希望看到上面有Y拍>交通工具>機車>大型重機>YAMAHA

 


string NameHierarchy(string ParentCategoryID)
    {
        string ttl = "";
      
        string TempCategoryID="";
        string GID="";
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = ConfigurationManager.AppSettings["Conn"];
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "select a.CategoryName,a.ParentCategoryID,a.GID,a.DisplayOrder  from dbo.Category as a where  CategoryID=@CategoryID order by DisplayOrder";
        cmd.Parameters.Add("@CategoryID", SqlDbType.Int);
        cmd.Parameters["@CategoryID"].Value = ParentCategoryID;
        try
        {
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    Name = dr[0].ToString();
                    TempCategoryID = dr[1].ToString();
                    GID=dr[2].ToString();
                }
            }
            //遞回...當不是主類別時...就一直呼叫自己
            //當進到最底層時開始回傳名稱串起來的字串
            if (TempCategoryID != "0")
            { //不是最底層時!!會先跑這個...然後再呼叫自己!!...
              ttl += NameHierarchy(TempCategoryID);
              ttl += "" + Name + ";
             } 
             else
            {
                //最底層會跑這個..因為是最底層只要先呼叫遊戲的名稱再把自己的名稱相串
              ttl += "" + Name + "";
            }
        }
        catch (Exception ex)
        { Response.Write(ex.Message); }
        finally { conn.Close(); }
        return ttl;
    }

只要使用時丟入自己的ID這樣就可以建立階層的類別查詢子到父