Как сделать древовидную структуру из filepath столбца базы данных - PullRequest
4 голосов
/ 13 марта 2010

У меня есть столбец в таблице базы данных, который содержит путь к файлу для каждого файла в таблице. Как я могу сделать дерево в C #, который будет имитировать столбец filepath в моей базе данных.

Вот как выглядит пример столбца filepath в столбце:

jsmith/project1/hello.cs
jsmith/project1/what.cs
jwilliams/project2/hello.cs

1 Ответ

1 голос
/ 13 марта 2010

Я сделал маленький пример. Я проверил это, и он отлично работает.

Обратите внимание, что Я создал класс MyDataBase для имитации вашей базы данных:

public void CreateTreeView()
{
    TreeView myTreeview = new TreeView();
    myTreeview.Dock = DockStyle.Fill;
    this.Controls.Add(myTreeview);

    foreach (string field in MyDataBase.FieldsInMyColumn())
    {
        string[] elements = field.Split('/');
        TreeNode parentNode = null;

        for (int i = 0; i < elements.Length - 1; ++i)
        {                                        
            if (parentNode == null)
            {
                bool exits = false;
                foreach (TreeNode node in myTreeview.Nodes)
                {
                    if (node.Text == elements[i])
                    {
                        exits = true;
                        parentNode = node;   
                    }
                }

                if (!exits)
                {
                    TreeNode childNode = new TreeNode(elements[i]);
                    myTreeview.Nodes.Add(childNode);
                    parentNode = childNode;
                }
            }
            else
            {
                bool exits = false;
                foreach (TreeNode node in parentNode.Nodes)
                {
                    if (node.Text == elements[i])
                    {
                        exits = true;
                        parentNode = node;
                    }
                }

                if (!exits)
                {
                    TreeNode childNode = new TreeNode(elements[i]);
                    parentNode.Nodes.Add(childNode);
                    parentNode = childNode;
                }
            }
        }

        if (parentNode != null)
        {
           parentNode.Nodes.Add(elements[elements.Length - 1]);
        }
    }         
}

EDIT

Здесь я вставляю свой вспомогательный код, который вам не нужен, но он поможет вам понять мой код или скопировать / вставить и попробовать его самостоятельно.

public static class MyDataBase
{
    private static List<string> fields = new List<string>();

    public static void AddField(string field)
    {
        fields.Add(field);
    }

    public static IList<string> FieldsInMyColumn()
    {
        return fields;
    }
}

Конструктор в форме1

public Form1()
{

    InitializeComponent();

    MyDataBase.AddField("jsmith/project1/hello.cs");
    MyDataBase.AddField("jsmith/project1/what.cs");
    MyDataBase.AddField("jsmith/project2/hello.cs");

    CreateTreeView();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...