2011-07-15 8 views
1

私のプロジェクトには「MyObject」があり、MyObjectのプロパティはList<MyObject>です。私は、任意の指定されたMyObjectの階層を表示するために、単純なHTMLネストされた順序付けられていないリストを構築したいと思います。いくつかの懸念事項:asp.netのサブオブジェクトの再帰的表示

1)深さが不明な子供の数は不明です。

2)私は深さをXの子供に制限したいと考えています。

3)リスト項目には、任意の有効なHTML、好ましくはasp.netコントロールを含めることができる必要があります。 LinkBut​​ton

これを処理する最善の方法は何ですか? TreeViews?ネストされたListViews?サンプルコードやチュートリアルへのリンクは大変ありがたいです。

+1

のようにTreeViewコントロールを使用することができますか?すべてのオブジェクトとそのプロパティの階層リストを表示しますか? asp.netコントロールはどのように関連していますか? –

+0

私のオブジェクトの表示名のツリーリストが必要なので、名前がLinkBut​​tonsになることがあります。そのため、私はそれらをポストバックして、インスタンス名をクリックしたオブジェクトからリストを再構築することができます。 – William

答えて

2

あなたの3番目の懸念は依然として不明ですが、次のようにするとあなたがうまくいくはずです。再帰関数を使用して、オブジェクトとその子を読み込みます。この例では、プロパティを簡単な箇条書きリストに追加していますが、他の状況でも簡単に変更できます。

public class MyObject 
    { 
     public string Name { get; set; } 
     public int Age { get; set; } 
     public List<MyObject> Children { get; set; } 
    } 

    public void BuildTree(MyObject obj) 
    { 
     lit.Text += "<ul>"; 
     lit.Text += "<li>" + obj.Name + "- Age: " + obj.Age + "</li>"; 
     if (obj.Children != null) 
     { 
      foreach (MyObject objChild in obj.Children) 
      { 
       BuildTree(objChild); 
      } 
     } 
     lit.Text += "</ul>"; 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     MyObject child1 = new MyObject { Name = "Joe", Age = 7 }; 
     MyObject child2 = new MyObject { Name = "Sally", Age = 6 }; 
     List<MyObject> children = new List<MyObject>(); 
     children.Add(child1); 
     children.Add(child2); 
     MyObject parent1 = new MyObject { Name = "Roger", Age = 36, Children = children }; 
     BuildTree(parent1); 
    } 
+0

私は文字通りの笑で実際のHTMLリストを構築することさえ考えませんでした。 – William

+0

これは私が設定した方法の基礎となりました。ありがとうございました。 – William

1

あなたは、あなたが表示しようとしているかのより多くの説明を与えることができる

public static int maxDepth = 5; 
public class MyObject 
{ 
    public string Text; 
    public string Value; 
    public List<MyObject> Children; 

    public MyObject(string text, string value) 
    { 
     Text = text; 
     Value = value; 
     Children = new List<MyObject>(); 
    } 
    public MyObject(string text) 
    { 
     Text = text; 
     Value = text; 
     Children = new List<MyObject>(); 
    } 
    public void AddToNode(TreeNode node, int depth) 
    { 
     TreeNode subNode = new TreeNode(Text, Value); 
     node.ChildNodes.Add(subNode); 
     if (depth < maxDepth) 
     { 
      for (int i = 0; i < Children.Count; i++) 
      { 
       Children[i].AddToNode(subNode, depth + 1); 
      } 
     } 
    } 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 
    MyObject myObject; 

    myObject = new MyObject("obj 1"); 
    myObject.Children.Add(new MyObject("obj 1.1")); 
    myObject.Children.Add(new MyObject("obj 1.2")); 
    myObject.Children[0].Children.Add(new MyObject("obj 1.1.1")); 
    myObject.Children[0].Children.Add(new MyObject("obj 1.1.2")); 
    myObject.Children[1].Children.Add(new MyObject("obj 1.2.1")); 
    myObject.Children[1].Children.Add(new MyObject("obj 1.2.2")); 

    treeView.Nodes.Add(new TreeNode("Root", "root")); 
    myObject.AddToNode(treeView.Nodes[0], 0); 
} 
+0

ノードのテキストをリンクにしたい場合はどうすればいいですか、それとももっと良いasp:LinkBut​​tonですか?それは可能ですか? – William