简体   繁体   English

具有不同文件夹类别的Treeview

[英]Treeview with different folder classes

I'm trying to pull together a treeview with folders of mixed classes. 我正在尝试将Treeview与混合类的文件夹放在一起。 The root folders are one class and subfolders are another, like this: 根文件夹是一类,子文件夹是另一类,如下所示:

Root Folder #1  <-- DirectoryItem class
--Sub Folder    <-- SubDirectoryItem class
----file        <-- FileItem class
Root Folder #2  <-- DirectoryItem class
--Sub Folder    <-- SubDirectoryItem class
----file        <-- FileItem class

I've been attempting to combine two different recursive methods so the subfolders are retrieved as "SubDirectoryItems" instead of "DirectoryItem" I'll spare that code attempt due to lack of clarify, but I'm wondering if there's a better approach? 我一直试图结合两种不同的递归方法,以便将子文件夹检索为“ SubDirectoryItems”而不是“ DirectoryItem”。由于缺乏澄清,我将保留该代码尝试,但是我想知道是否有更好的方法?

    class ItemProvider
{
    public List<Item> GetItems(string path, SearchOption searchOption)
    {
        var items = new List<Item>();
        var dirInfo = new DirectoryInfo(path);

        foreach (var directory in dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly))
        {
            var item = new DirectoryItem
            {
                Name = directory.Name,
                Path = directory.FullName,
                Items = GetItems(directory.FullName, SearchOption.AllDirectories)
            };

            items.Add(item);
        }

        foreach (var subdirectory in dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly))
        {
            var item = new SubDirectoryItem()
            {
                Name = subdirectory.Name,
                Path = subdirectory.FullName,
                Items = GetItems(subdirectory.FullName, SearchOption.AllDirectories)
            };

            items.Add(item);
        }

        foreach (var file in dirInfo.GetFiles())
        {
            var item = new FileItem
            {
                Name = file.Name,
                Path = file.FullName
            };

            items.Add(item);
        }       

        return items;
    }

}

} }

I was able to figure it out. 我能够弄清楚。 I made the first list TopDirectoryOnly then pulled in the rest of the items via a 2nd list for AllDirectories. 我制作了第一个列表TopDirectoryOnly,然后通过第二个AllDirectories列表提取了其余项目。 Here's the code in case it helps any other beginners (like me): 以下代码可以帮助其他初学者(例如我):

class ItemProvider
{
    public List<Item> GetItems(string path, SearchOption searchOption)
    {
        var items = new List<Item>();
        var dirInfo = new DirectoryInfo(path);

        foreach (var directory in dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly))
        {
            var item = new DirectoryItem
            {
                Name = directory.Name,
                Path = directory.FullName,
                Items = GetSubItems(directory.FullName, SearchOption.AllDirectories)
            };

            items.Add(item);
        }

        return items;
    }

    public List<Item> GetSubItems(string path, SearchOption searchOption)
    {
        var items = new List<Item>();
        var dirInfo = new DirectoryInfo(path);


        foreach (var subdirectory in dirInfo.GetDirectories("*.*", SearchOption.AllDirectories))
        {
            var item = new SubDirectoryItem()
            {
                Name = subdirectory.Name,
                Path = subdirectory.FullName,
                Items = GetSubItems(subdirectory.FullName, SearchOption.AllDirectories)
            };

            items.Add(item);
        }

        foreach (var file in dirInfo.GetFiles())
        {
            var item = new FileItem
            {
                Name = file.Name,
                Path = file.FullName
            };

            items.Add(item);
        }

        return items;
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM