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>