RickZeeland
Боюсь, что "автоматического" способа нет, но вы можете использовать набор данных, как в этом примере Winforms:
/// <summary>
/// Populate a treeview from an XML file using a DataSet.
/// </summary>
public partial class FormTreeview : Form
{
DataSet ds;
string xmlpath = @"test.xml";
public FormTreeview()
{
InitializeComponent();
ds = new DataSet();
ds.ReadXml(xmlpath);
int index = 0;
// Traverse the rows
foreach (DataRow ns in ds.Tables[0].Rows)
{
index++;
Debug.Print($"{ns[0]} {ns[1]} {ns[2]}");
string id = ns[2].ToString();
if (id == "0")
{
TreeNode parentNode = treeView1.Nodes.Add(ns[1].ToString());
PopulateChildNodes(index, parentNode, ns[0].ToString());
}
}
this.treeView1.ExpandAll();
}
private void PopulateChildNodes(int index, TreeNode parent, string id)
{
if (parent.GetNodeCount(false) == 0)
{
// Traverse the settings rows and add settings if they exist
foreach (DataRow setting in ds.Tables[1].Rows)
{
if (id == setting[3].ToString())
{
Debug.Print($" {setting[0]} {setting[1]} {setting[2]} {setting[3]}");
parent.Nodes.Add($"{setting[0]}: {setting[2]}");
}
}
}
// Traverse the rows
for (int i = index; i < ds.Tables[0].Rows.Count; i++)
{
DataRow ns = ds.Tables[0].Rows[i];
if (id == ns[2].ToString())
{
Debug.Print($" {ns[0]} {ns[1]} {ns[2]}");
TreeNode childNode = parent.Nodes.Add(ns[1].ToString());
PopulateChildNodes(index, childNode, ns[0].ToString());
}
}
}
}