Devo generare una lista con dati prelevati da una tabella gerarchica con i seguenti campi:

ID Testo ParentID

Ho creato due funzioni:

codice:
private string WriteMenu()
        {
            SqlConnection conn = new SqlConnection(");
            string sql = "Select * from Menu where ParentID = 0 order by Text asc";
            SqlCommand comm = new SqlCommand(sql, conn);
            conn.Open();
            SqlDataReader dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
            StringBuilder sb = new StringBuilder();
            string verifica = string.Empty;
            sb.Append("<ul>");
            while(dr.Read())
            {
                sb.Append("[*]");
                   sb.Append(dr["Text"].ToString());
                   sb.Append(WriteSubChildMenu(Convert.ToInt32(dr["MenuId"])));
         
                sb.Append("");
            }
            sb.Append("[/list]");
            conn.Close();
            return sb.ToString();
            }
e l'altra funzione è la seguente:

codice:
 private string WriteSubChildMenu(int menuid)
        {
            SqlConnection conn = new SqlConnection);
            string sql = "Select * FROM Menu where ParentID = " + menuid;
            SqlCommand comm = new SqlCommand(sql, conn);
            conn.Open();
            SqlDataReader dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
            StringBuilder sb = new StringBuilder();
           sb.Append("<ul>");
            string verifica = string.Empty;
            while (dr.Read())
            {
                verifica = dr["Text"].ToString();
                if (verifica.Length > 0)
                {
                    write = true;
                    sb.Append("[*]");
                    sb.Append(dr["Text"].ToString());
                    sb.Append("");

                }
               
            }
            sb.Append("[/list]");
            conn.Close();
            if(write)
            return sb.ToString();
            else
                return string.Empty;
        }
L'albero viene generato correttamente però quando ci sono delle voci di primo livello con parentid = 0 vengono cmq generati 2 tag <ul>[/list]:

codice:
 <ul>[*]Applications<ul>[*]Background[*]Details[*]Mobile Device[*]Portal[*]Web Applicaitons[*]Demo[*]Performance Tests[/list][*]Document<ul>[*]Tutorials[*]Programmers[/list][*]Download<ul>[/list][*]Product<ul>[/list][*]Support<ul>[*]FAQ[*]Forum[*]Contact Us[/list][*]test<ul>[/list][*]test1<ul>[/list][/list]
Le voci di primo livello sono test test 1 e product


grazie