Преобразование TreeNode в DataTable динамически - PullRequest
1 голос
/ 30 ноября 2011

Существует множество методов преобразования данных в древовидную структуру (treenode), например this . Но есть ли способ создать поддерживаемую иерархию данных? Например если TreeNode похоже на

A-A1
 -A2-A21
    -A22
B-B1
 -B2-B21
 -B3-B31
    -B32-B321
        -B322
    -B33
 -B4

должно выглядеть следующим образом в datatable. Затем я могу сохранить его в базе данных или показать пользователю в datagrid.

enter image description here

Все столбцы могут принимать значения string.

Есть ли способ, чтобы я мог передать treenode в функцию, и она будет динамически создавать подобные данные. treenode структура будет меняться каждый раз, поэтому я не могу жестко закодировать ее. Предположим, у меня есть рекурсивная функция, подобная этой.

public void CreateData(TreeNode trn)
{

   foreach(TreeNode t in trn.Nodes)
   {
       CreateData(t);
   }

}

Я сталкиваюсь с трудностями в понимании потока кода для рекурсивной функции. Любое предложение приветствуется.

Спасибо.

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Вот псевдокод, надеюсь, он поможет вам справиться с вашей проблемой

private void getNodeList()
{
    //This will hold your node text
    List<string> nodeTextList = new List<string>();
    //loop through all teeview nodes
    foreach(TreeNode rootNode in treeView.Nodes)
    {
       //Add root node to list
       nodeTextList.Add(rootNode.Text);
       //Do recursive getter to get child nodes of root node
       getChildNodes(rootNode, nodeTextList);

    }
    //Do with nodeTextList what ever you want, for example add to datatable.
}

private void getChildNodes(TreeNode rootNode, List<string> nodeTextList)
{
   foreach(TreeNode childNode in rootNode.Nodes)
   {
       //Add child node text
       nodeTextList.Add(childNode.Text);      
       getChildNodes(childNode, nodeTextList);
   }
}
0 голосов
/ 30 ноября 2011

Если вы не можете понять эту функцию или как она должна работать, вы можете прочитать о Depth-first search.Это именно то, что вы делаете + вы должны добавить код, который сохраняет узел, в котором вы находитесь.

...