【问题标题】:How to make a treeview from a database column filepath如何从数据库列文件路径创建树视图
【发布时间】:2011-01-27 00:43:53
【问题描述】:

我在数据库表中有一个列,其中包含表中每个文件的文件路径。如何在 c# 中创建一个树视图,它将模仿我数据库中的文件路径列。

这是列中示例文件路径列的样子:

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

【问题讨论】:

  • 能否请您添加树视图的外观。
  • 为什么投反对票?我不认为这是一个坏问题......提交者没有提供树视图应该是什么样子,因为它应该相当明显:)
  • 我们是否可以假设,正如 Javier Morillo 在下面的回答中所做的那样,您可以访问列中的“原始数据”作为 List :如果没有,什么格式将“原始数据”在吗?我们可以假设“原始数据”按照您的示例中的建议进行了 alpha 排序吗?最后,我们是否可以假设任何文件路径的“深度”是任意深度:或者,如您的示例所示,每个文件路径的固定深度为 #3 ?

标签: c# treeview


【解决方案1】:

我做了一个小例子。我已经测试过了,它工作正常。

请注意我创建了一个 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]);
        }
    }         
}

编辑

我在这里粘贴我的辅助代码,你不需要,但它会帮助你理解我的代码,或者复制/粘贴并自己尝试。

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;
    }
}

form1 中的构造函数

public Form1()
{

    InitializeComponent();

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

    CreateTreeView();
}

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 2017-01-10
    • 2012-10-26
    • 2011-09-18
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    相关资源
    最近更新 更多