简体   繁体   English

在TreeView中查看的订单列表

[英]Order List to view in TreeView

I want to write an application to parse shortlinks in a treeview in order of hostnames like: 我想编写一个应用程序来按树名的顺序解析树状视图中的短链接:

Input:
bit.ly/sh125ad
adf.ly/sh1d5ad
bit.ly/sh1d5ad
adf.ly/sh125ad
adf.ly/sh12had

Output:
adf.ly
    adf.ly/sh1d5ad
    adf.ly/sh125ad
    adf.ly/sh12had
bit.ly
    bit.ly/sh125ad
    bit.ly/sh1d5ad

After I wrote the parsing part: 在我写了解析部分之后:

List<string> links = linkField.Text.Split('\n').ToList();

I don't know how I should add the parent nodes in treeView.Nodes and then add the Child ones. 我不知道如何在treeView.Nodes添加父节点,然后添加Child节点。 My try was: 我的尝试是:

foreach (string link in links)
{
    Uri url = new Uri(link);
    if (!treeView.Nodes.Contains(new TreeNode(url.Host)))
         treeView.Nodes.Add(new TreeNode(url.Host));
}

But if I wanted to add the links I couldn't find the first TreeNode, because of its childs 但是,如果我想添加链接,由于它的子节点,我找不到第一个TreeNode

This is a bit messy way but its quickly does what you want. 这是一个有点混乱的方法,但是它可以快速完成您想要的操作。 First of all make a class to hold each uniqe domains and its URLs: 首先创建一个类来保存每个uniqe域及其URL:

public class ShortLink
{
    public string DomainName { get; set; }
    public List<string> UrlList;

    public ShortLink(string domainName)
    {
        DomainName = domainName;
        UrlList = new List<string>();
    }

    public void AddUrl(string url)
    {
        if(!UrlList.Contains(url))
            UrlList.Add(url);
    }

    public string GetFullUrl(int indexOfUrlInList)
    {
        return DomainName + "/" + UrlList[indexOfUrlInList];
    }

    //Add other methods like remove and stuff
}

Assuming that your form has a treview called treeView1 then try the code below: 假设您的表单有一个称为treeView1的Treview,然后尝试以下代码:

public partial class Form1 : Form
{
    private List<string> _links = new List<string>(new []{
        "bit.ly/sh125ad",
        "adf.ly/sh1d5ad",
        "bit.ly/sh1d5ad",
        "adf.ly/sh125ad",
        "adf.ly/sh12had"
    });

    private List<ShortLink> _shortLinks = new List<ShortLink>();

    public Form1()
    {
        InitializeComponent();

        PopulateTreeView();
    }

    private void PopulateTreeView()
    {
        //Make the dictionary
        foreach (var link in _links)
        {
            var parts = link.Split('/');
            var domainPart = parts[0];

            if (!_shortLinks.Contains(_shortLinks.FirstOrDefault(x => x.DomainName == domainPart)))
            {
                var shortLink = new ShortLink(domainPart);
                _shortLinks.Add(shortLink);
            }
        }

        foreach (var link in _links)
        {
            var parts = link.Split('/');
            var domainPart = parts[0];
            var urlPart = parts[1];
            //find a ShortLink in the list we made that matches this domainpart
            var shortLink = _shortLinks.FirstOrDefault(x => x.DomainName == domainPart);

            //if its not null, we add the url part to taht!
            if(shortLink != null)
                shortLink.AddUrl(urlPart);

            //now we have all domains and parts
        }


        //Populate treeview
        foreach (var shortLink in _shortLinks)
        {
            var parentNode = new TreeNode(shortLink.DomainName);
            var childNodes = new List<TreeNode>();

            //add all the links in the current shortLink to the list of treenodes
            foreach (var link in shortLink.UrlList)
            {
                childNodes.Add(new TreeNode(link));
            }

            //now time to add child notes to parent node
            parentNode.Nodes.AddRange(childNodes.ToArray());

            treeView1.Nodes.Add(parentNode);
        }
    }
}

UPDATE UPDATE

I just realised your question was actually about finding parent nodes. 我刚刚意识到您的问题实际上是关于找到父节点的。 See the method below: 请参阅以下方法:

private void AddToTreeView(string domain, string link)
{
    foreach (TreeNode node in treeView1.Nodes)
    {
        if (node.Text == domain)
        {
            node.Nodes.Add(link);
        }
    }
}

Of course you can create a full node details when creating Node in a foreach loop. 当然,在foreach循环中创建Node时,您可以创建完整的节点详细信息。 You can set fieds such as Name and Tag for each node for further use! 您可以为每个节点设置诸如NameTag类的文件,以备将来使用!

You can also subclass the TreeNode and have your own custom fields to it. 您也可以子类化TreeNode并为其拥有自己的自定义字段。

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

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