この場合、異なるタイプを扱っているので、コードを汎用化するために、それぞれに共通のインターフェースを実装する必要があります。基本的なアプローチは、必要なプロパティ(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");
}
:
はここでラフな例です。トップレベルの型と上記のメソッドのコレクションのちょうどパスは、必要な入れ子リストを作成する階層を歩き回ります。
真実と私はその解決策 "ページ"テーブルのような自己参照データを持つ1つのツリーに対してそのソリューションを実装しました。私の問題では、私は別の木が欲しいと思っていました。私は基本的に4つの別々のテーブルを掘り下げて項目に入りたいと思っていました。 – Breadtruck
質問を編集して、より明確にすることを願っています。 – Breadtruck