2009-07-15 47 views
2

我在L2S類中有5個表dbml:Global >> Categories >> Sub-Category >> Item >> Item Data 。我希望能夠從全局表格向下導航到結構樹,以獲取項目 - 顯示項目數據表中的標題。把LINQ到SQL結果分層結構在無序列表中使用(對於jQuery樹)

我有一個現有的控件,使用IHierarchyData/IHierarchicalEnumerable擴展集合通過遍歷集合輸出一個無序列表,然後我變成一棵樹與jQuery。我做到了這一點基於Return Un-Ordered List from hierarchical sql data

是否有一種簡單的通用方式,我可以用來把上述表結構中的數據放入一個Hierarchical結構中,這樣我就可以重新使用我現有的控件,而只需傳入一個不同的採集。

回答

0

我認爲掛你的是你不需要四個表來做到這一點。

再看Return unordered list from hierarchical sql data。那裏沒有四張桌子。只有一個。

+0

真的,我爲一棵樹實現了這個解決方案,在那裏我有自我引用的數據,就像那個解決方案的「頁面」表一樣。對於我的問題,我想另一棵樹,我想基本上鑽了4個獨立的表進入該項目。 – Breadtruck 2009-07-17 20:08:15

+0

我編輯了這個問題,希望能讓它更清晰。 – Breadtruck 2009-07-17 20:25:04

1

您試過Nested Listviews?我已經在幾頁中實現了這個解決方案。我直接使用ObjectDataSources而不是LinqDataSources來保持我的數據邏輯獨立,但嵌套的EntitySets工作得很好。

0

因爲你在這種情況下處理不同的類型,你將不得不在每個接口上實現一個通用接口來使代碼具有通用性。基本的方法是創建一個包含任何所需屬性的接口(例如DisplayText,ActionURL等),然後遞歸地遍歷集合。

這裏有一個粗略的例子:

public interface IDataItem 
    { 
     string DisplayText { get; } 
     string ActionUrl { get; } 
     bool HasChildren { get; } 
     IEnumerable<IDataItem> GetChildren(); 
    } 

public void CreateTree(HtmlTextWriter writer, IEnumerable<IDataItem> collection) 
    { 
     writer.WriteFullBeginTag("ul"); 
     foreach (var data in collection) 
     { 
      writer.WriteFullBeginTag("li"); 
      writer.WriteBeginTag("a"); 
      writer.WriteAttribute("href",data.ActionUrl); 
      writer.Write(HtmlTextWriter.TagRightChar); 
      writer.Write(data.DisplayText); 
      writer.WriteEndTag("a"); 
      if(data.HasChildren) 
       CreateTree(writer, data.GetChildren()); 
      writer.WriteEndTag("li"); 
     } 
     writer.WriteEndTag("ul"); 
    } 

您將必須實現每個要包含在TreeView你的類型的接口。頂級類型和上述方法的集合中的正確傳遞將沿着層次結構走下去,從而創建所需的嵌套列表。