Devo generare una lista con dati prelevati da una tabella gerarchica con i seguenti campi:
ID Testo ParentID
Ho creato due funzioni:
e l'altra funzione è la seguente: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(); }
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: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; }
Le voci di primo livello sono test test 1 e productcodice:<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]
grazie

Rispondi quotando
