Заполнение TreeView данными из XML файла

c# Работа с TreeView. Часть 2

Продолжаем работать с элементом управления TreeView и сегодня рассмотрим следующие моменты: создание и добавления узлов, контроль текущего местоположения в дереве, а так же добавление атрибутов.

Для начала добавим в созданный ранее проект новый XML файл. Если Вы не знаете, как это сделать, то можете прочитать об этом здесь

<?xml version="1.0" encoding="utf-8"?>
<cars>
<models id="1">
<name platform="2108" color="red">Vaz</name>
<width metricSystem="mm">1650</width>
<height>1056</height>
</models>
</cars>

Заполнение TreeView

Задача проста, нужно заполнить TreeView данными из XML файла. В результате должны получить эти же данные в виде иерархического дерева.

исходник

private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
{
XmlNode xNode;
XmlNodeList nodeList;
try
{
if (inXmlNode.HasChildNodes)
{
nodeList = inXmlNode.ChildNodes;
for (int i = 0; i  1; i++)
{
xNode = inXmlNode.ChildNodes[i];
//добавляем новый узел в дерево
if (nodeList[i].NodeType == XmlNodeType.Element)
{
inTreeNode.Nodes.Add(new TreeNode(xNode.Name));
}
else
{
//добавляем значение элемента
if (nodeList[i].NodeType == XmlNodeType.Text)
{
inTreeNode.NextNode.Nodes.Add(new TreeNode("Value",
new TreeNode []{new TreeNode(inXmlNode.InnerText)}));
}
}
//добавляем атрибуты
if (xNode.Attributes != null)
{
foreach (XmlAttribute atr in xNode.Attributes)
{
inTreeNode.LastNode.Nodes.Add(new TreeNode(atr.Name,
new TreeNode [] { new TreeNode(atr.Value) }));
}
}
//рекурсия
AddNode(xNode, inTreeNode.Nodes[i]);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

результат

дерево

Контроль текущего местоположения в дереве

При создании нового узла, например «Value» с помощью таких свойств, как NextNode, FirstNode, LastNode, FullPath можно изменить или определить текущее местоположение в дереве, чтобы точно знать, куда будет добавлен новый узел.

Например, возьмём всё тот же узел &#171;Value&#187;, перед созданием данного узла текущий путь, который можно посмотреть при помощи свойства FullPath, будет иметь следующее значение:

string currentPath = inTreeNode.FullPath;
"cars\models\id"  //- текущий путь

Если сейчас добавить новый узел &#171;Value&#187; по указанному пути, то получим следующий результат:

inTreeNode.Nodes.Add(new TreeNode("Value"));

добавленный узел

Узел &#171;Value&#187; создается дочерним для элемента “id”. Нам же нужно создать его дочерним для узла «name».

Определяем текущее местоположение в дереве.

string currentPath = inTreeNode.NextNode.FullPath;

текущий путь:

"cars\models\name"

С помощью свойства NextNode переходим в нужный нам узел, а затем добавляем дочерний узел «Value»

inTreeNode.NextNode.Nodes.Add(...);

32

Добавление значения элемента

Узел “name” содержит текстовое содержимое: “Vaz”. В иерархическом дереве, это значение будет являться дочерним элементом для узла “Value”.

45

После создания и добавления в иерархическое дерево узел “Value” будет, является последним узлом, а значит обратиться к нему можно при помощи свойства LastNode.

inTreeNode.NextNode.LastNode.Nodes.Add(...);

текущий путь:

cars\models\name\Value

Для добавления дочерних узлов, так же можно использовать следующий способ:

было

inTreeNode.NextNode.Nodes.Add(new TreeNode("Value"));
inTreeNode.NextNode.LastNode.Nodes.Add(inXmlNode.InnerText);

стало

inTreeNode.NextNode.Nodes.Add(new TreeNode("Value",
new TreeNode [] {new TreeNode (inXmlNode.InnerText) }));

Сначала создаётся родительский узел, затем в качестве массива ему передается список дочерних узлов.

Читайте также:

4 комментария

  1. Доброго утра

    Код не до конца обработал документ &#8230;

    Кстати возьмите на заметку иконки к узлам &#8212; позволяет визуально разделить элементы и атрибуты.

  2. Данный пример не является универсальным средством, он лишь демонстрирует, как можно обработать именно конкретный пример. По этому для другой структуры XML документа код придется переделать.

    Я в курсе про иконки, но в данной статье всё таки уклон был на построение дерева, в частности перемещение, добавление родительских и дочерних узлов.

  3. Спасибо за работу, хороший сайт!

    У меня вопрос: если хороший туториал где разбирается, как скрестит GridView с TreeView? или может сами сделаете, очень хочется разобраться!!!

    спасибо заранее.

  4. Сделать можно, но хотелось бы узнать, какие темы интересуют? Например: вывод данных в TreeView из GridView, изменение или получение данных и так далее.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *