我的项目有一些“MyObject”,MyObject的属性为List<MyObject>
。我想构建一个简单的HTML嵌套无序列表来显示任何指定的MyObject的层次结构。一些问题:
1)孩子的总深度未知。
2)我希望能够将深度限制为X个孩子。
3)列表项需要能够包含任何有效的HTML,最好是asp.net控件,例如一个LinkButton
处理此问题的最佳方法是什么?的TreeView?嵌套ListViews?我们非常感谢示例代码或教程链接。
答案 0 :(得分:2)
您的第三个问题仍然不明确,但以下内容应该让您前进。它使用递归函数来读取对象及其子对象。在此示例中,属性将添加到简单的项目符号列表中,但可以在其他情况下轻松修改。
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);
}
答案 1 :(得分:1)
你可以像那样使用TreeView
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);
}