2013-10-04 15 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 Web頁面而不是表單我不確定如何實現樹視圖。 (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列,以便您可以添加並從數據庫中刪除商品,但仍控制在它們的順序顯示在其各個節點中。

相關問題