J'ai un objet de la liste de types à partir de laquelle je souhaite utiliser pour remplir une arborescence d'une vue d'arbre dans ASP.NET C #.
Chaque élément objet a: p>
id | Name | ParentId ------------------------- 1 | Alice | 0 2 | Bob | 1 3 | Charlie | 1 4 | David | 2
3 Réponses :
Je pense que cela devrait vous aider à démarrer. J'ai créé une classe myObject code> pour imiter votre objet.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<MyObject> list = new List<MyObject>();
list.Add(new MyObject(){Id=1, Name="Alice", ParentId=0});
list.Add(new MyObject(){Id=2, Name="Bob", ParentId=1});
list.Add(new MyObject(){Id=3, Name="Charlie", ParentId=1});
list.Add(new MyObject(){Id=4, Name="David", ParentId=2});
BindTree(list, null);
}
}
private void BindTree(IEnumerable<MyObject> list, TreeNode parentNode)
{
var nodes = list.Where(x => parentNode == null ? x.ParentId == 0 : x.ParentId == int.Parse(parentNode.Value));
foreach (var node in nodes)
{
TreeNode newNode = new TreeNode(node.Name, node.Id.ToString());
if (parentNode == null)
{
treeView1.Nodes.Add(newNode);
}
else
{
parentNode.ChildNodes.Add(newNode);
}
BindTree(list, newNode);
}
}
+1: C'est la solution que je cherchais .. fonctionne parfaitement .. merci !!
En effet, ce truc fonctionne parfaitement! Exactement ce que je cherchais :)
La liste IEnumerable
Je veux le même scénario mais au format JSON, c'est possible?
//In load for example if (!IsPostBack) { DataSet ds = new DataSet(); ds = getRoles(); //function that gets data collection from db. tvRoles.Nodes.Clear(); BindTree(ds, null); tvRoles.DataBind(); } private void BindTree(DataSet ds, TreeNode parentNode) { DataRow[] ChildRows; if (parentNode == null) { string strExpr = "ParentId=0"; ChildRows = ds.Tables[0].Select(strExpr); } else { string strExpr = "ParentId=" + parentNode.Value.ToString(); ChildRows = ds.Tables[0].Select(strExpr); } foreach (DataRow dr in ChildRows) { TreeNode newNode = new TreeNode(dr["Name"].ToString(), dr["Id"].ToString()); if (parentNode == null) { tvRoles.Nodes.Add(newNode); } else { parentNode.ChildNodes.Add(newNode); } BindTree(ds, newNode); } }
Ceci est un échantillon avec une entité de catégorie qui se réfère elle-même. Nous devrions d'abord préparer notre source de données: puis dans notre code derrière nous avons: p>