2013-10-04 6 views
0

У меня есть база данных, подобная этой:Список всех записей базы данных иерархически

| Element_ID    | Element_Parent    | 
|____________1_____________|_______________0_______________| 
|____________2_____________|_______________0_______________| 
|____________3_____________|_______________1_______________| 
|____________4_____________|_______________3_______________| 
|____________5_____________|_______________3_______________| 
|____________6_____________|_______________2_______________| 
|____________7_____________|_______________6_______________| 
|____________8_____________|_______________6_______________| 

Где Element_Parent относится к колонку ELEMENT_ID и 0 означает, что элемент не имеет родителя.

мне нужно отобразить записи базы данных, подобные этим:

<ul> 
    <li> 
     1 
     <ul> 
      <li> 
       3 
       <ul> 
        <li>4</li> 
        <li>5</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 

    <li> 
     2 
     <ul> 
      <li> 
       6 
       <ul> 
        <li>7</li> 
        <li>8</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 

Я доступ к базе данных с помощью DynamicRecords.

+0

Боюсь, что ваш вопрос не очень ясен. Покажите нам код, который у вас уже есть. Как общий совет, соны, как вам нужна древовидная структура. – Carra

+0

Поскольку я использую веб-страницы ASP.NET вместо форм, я не совсем уверен, как реализовать древовидную структуру. Единственным кодом, который у меня есть помимо аутентификации, является соединение с базой данных (var db = Database.Open ("foobar");) и (var databaseData = db.Query ("Select * From Elements");) – parhum

+0

вопрос: Я понял решение с помощью javascript. Я отправлю решение, когда прошло 6 часов (у меня недостаточно репутации). – parhum

ответ

0

Если вы хотите решение на стороне сервера, вы можете получить что-то полезное из этой статьи, которую я написал об использовании рекурсии в веб-страницах ASP.NET: http://www.mikesdotnetting.com/Article/208/Practical-Recursion-in-ASP.NET-Web-Pages-with-WebMatrix.

Но, по сути, вам нужен помощник что-то вроде этого:

@helper BuildTreeView(IEnumerable<dynamic> data, int? parentid = null, int level = 0) { 
    var nodes = data.Where(n => n.ParentId == parentid).OrderBy(n => n.DisplayOrder); 
    if (nodes.Any()) { 
     if(nodes.First().ParentId != null){ 
      level++; 
     } 
     foreach (var node in nodes) { 
      <div style="padding-left:@(level * 20)px;"> 
       @node.Text 
      </div> 
      @BuildTreeView(data, node.Id, level); 
     } 
    } 
} 

я добавил колонку DisplayOrder, так что вы можете добавлять и удалять элементы из базы данных и по-прежнему контролировать порядок, в котором они отображаются в их отдельных узлах.

Смежные вопросы