因爲你在這種情況下處理不同的類型,你將不得不在每個接口上實現一個通用接口來使代碼具有通用性。基本的方法是創建一個包含任何所需屬性的接口(例如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你的類型的接口。頂級類型和上述方法的集合中的正確傳遞將沿着層次結構走下去,從而創建所需的嵌套列表。
真的,我爲一棵樹實現了這個解決方案,在那裏我有自我引用的數據,就像那個解決方案的「頁面」表一樣。對於我的問題,我想另一棵樹,我想基本上鑽了4個獨立的表進入該項目。 – Breadtruck 2009-07-17 20:08:15
我編輯了這個問題,希望能讓它更清晰。 – Breadtruck 2009-07-17 20:25:04