Menu wielopoziomowe z bazy danych

0

Cześć,
Mam problem, robię sobie program, który ma generować menu z bazy, ogólnie mówiąc wymyśliłem takie coś z rekurencją:

public string GetRet(List<TreeNode> headerTree, string root_li)
        {

            foreach (var item in headerTree)
            {
                if(item.Children.Any())
                {
                    root_li += "<li><a href=\"#\">" + item.Id + "---" + item.Name + "</a></li>";

                    root_li = root_li + "<ul> ";

                    return GetRet(item.Children, root_li) + "</ul>";
                }
                else
                {
                    root_li += "<li>" + item.Id + "---" + item.Name + "</li>";
                }
            }
            return root_li;
        }

Niby działa przy niewielkiej ilości danych ale jak już mam 10 pozycji w bazie to tak nie omija sporo pozycji.

public class TreeNode
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public TreeNode Parent { get; set; }
        public List<TreeNode> Children { get; set; }
    }

Z góry dziękuję za pomoc.

0

Użyj debuggera

0

Nie przesadziłeś czasem z poziomem skomplikowania tego kodu? :P

public string GetFlat(List<TreeNode> items) {
	var result = "";
	
	foreach (var item in items) {
		if (item.Children.Any()) {
			result += "...";
			result += "<ul>" + GetFlat(item.Children) + "</ul>";
		} else {
			result += "...";
		}
	}
	
	return result;
}
1

Ogólnie to wypadałoby użyć StringBuilder zamiast konkatenować stringi tyle razy.

0

Patryk - faktycznie przekombinowałem heh, dziękuję za odpowiedź! ;)
somekind - też prawda, za bardzo skupiłem się na jednej rzeczy, a o drugiej w ogóle nie pomyślałem :( dzięki za przypomnienie!

PS. tak zapytam przy okazji, w html/css jakbym chciał zrobić to menu rozwijane bo w sumie nie ma żadnego sensu robić czegoś takiego gdyby to tak nie działało to czego użyć? target myślę, że odpada bo po kliknięciu w jeden element, a następnie w drugi, to zamyka się pierwszy poziom czyli automatycznie nie ma się dostępu do tego

0
duzy napisał(a):

PS. tak zapytam przy okazji, w html/css jakbym chciał zrobić to menu rozwijane bo w sumie nie ma żadnego sensu robić czegoś takiego gdyby to tak nie działało to czego użyć? target myślę, że odpada bo po kliknięciu w jeden element, a następnie w drugi, to zamyka się pierwszy poziom czyli automatycznie nie ma się dostępu do tego

 <select>
   <option value=...>...</option>
   <option value=...>...</option>
   <option value=...>...</option>
</select>
0

Zdecydowanie nie będzie to <select>

0
duzy napisał(a):

Zdecydowanie nie będzie to <select>

Faktycznie nie doczytałem ,że menu ma być zagnieżdżone. Wystarczy wpisać w google nested dropdown list html i na pewno coś dla siebie znajdziesz ;)

0

Dzięki, chyba póki co zostanę przy najeżdżaniu, później będę poprawiał na kliknięcie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1