2015-07-22 2 views
0

Если у меня есть база данных Microsoft Access населенной, как это:Наполнение рекурсивный список TreeView

db data

Использование ASP VBScript, как бы я напечатать, что в список TreeView? С бесконечным потенциалом уровней, как и любой странице может иметь дочерние страницы ...

Например, выше дБ должны печататься выглядеть следующим образом:

List


Update:

Я сейчас застрял в рекурсивном аспекте этого ...

... 

rs.open "SELECT id,parent_id,page_name,node_path FROM pages ORDER BY node_path",conn 
records = rs.GetRows 

... 

<% 
    function tree(parent, arrPages) 

     children = false 

     for x = 0 to ubound(arrPages, 2) 
      if (cint(arrPages(1, x)) = parent) then 
       if (children = false AND parent > 0) then 
        children = true 
        Response.Write("<ul>") 
       end if 
      %> 
      <li> 
       <%=arrPages(2,x)%> 
       <% Call Tree(arrPages(0,x), arrPages) %> 
      </li> 
      <% 
      end if 
     next 

     if (children = true AND parent > 0) then 
      %></ul><% 
     end if 

    end function 

    Response.Write "<ul>" 
    Call tree(0, records) 
    Response.Write "</ul>" 
%> 

Тем не менее, это только пишет:

enter image description here

+0

Я читал записи на одном дыхании, используя [GetRows] (https://msdn.microsoft.com/en-us/library/windows/desktop/ ms675120 (v = vs.85) .aspx) - намного проще. Оттуда вы можете перебирать набор записей столько, сколько хотите. – Paul

+0

Спасибо @Paul, GetRows - определенно путь. Однако я не могу сейчас полностью определить рекуррентный аспект этого ... – beyondit01

+0

'node-path' для неполного рабочего дня должен быть' .0.1.3.6.', а для 'сотрудников' он должен быть' .0.1.' – SearchAndResQ

ответ

0

Я положил свои данные в массив, и ваш код работал отлично.

Вы уверены, что ваш запрос вытащил правильные данные?

<% 
Dim records(3, 6) 

records(0, 0) = 1 
records(1, 0) = 0 
records(3, 0) = ".0." 
records(2, 0) = "Home" 

records(0, 1) = 2 
records(1, 1) = 1 
records(3, 1) = ".0.1." 
records(2, 1) = "About" 

records(0, 2) = 3 
records(1, 2) = 1 
records(3, 2) = ".0.1." 
records(2, 2) = "Contact" 

records(0, 3) = 4 
records(1, 3) = 2 
records(3, 3) = ".0.1.2." 
records(2, 3) = "What we do" 

records(0, 4) = 5 
records(1, 4) = 3 
records(3, 4) = ".0.1.3." 
records(2, 4) = "Employees" 

records(0, 5) = 6 
records(1, 5) = 5 
records(3, 5) = ".0.1.3.5." 
records(2, 5) = "Full time" 

records(0, 6) = 7 
records(1, 6) = 5 
records(3, 6) = ".0.1.3.5." 
records(2, 6) = "Part time" 

    function tree(parent, arrPages) 

     children = false 

     for x = 0 to ubound(arrPages, 2) 
      if (cint(arrPages(1, x)) = parent) then 
       if (children = false AND parent > 0) then 
        children = true 
        Response.Write("<ul>") 
       end if 
      %> 
      <li> 
       <%=arrPages(2,x)%> 
       <% Call Tree(arrPages(0,x), arrPages) %> 
      </li> 
      <% 
      end if 
     next 

     if (children = true AND parent > 0) then 
      %></ul><% 
     end if 

    end function 

    Response.Write "<ul>" 
    Call tree(0, records) 
    Response.Write "</ul>" 
%> 

Результат:

enter image description here

+0

Его SQL - это «SELECT id, parent_id, page_name, node_path», где ваш, кажется, находится в идентификаторе заказа, parent_id, node_path, page_name – pee2pee

+0

Нет, мой же ваш, как ваш: id, parent_id, page_name, node_path. Получены ли все результаты по вашему запросу? Вы попробовали Response.Write все значение sin массив, чтобы проверить? – johna

+0

Извините @ pee2pee, только что понял, что вы не были OP, поэтому вы можете игнорировать эти вопросы :) – johna

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