从List< myObj>填充TreeView的C#WinForms [英] C# WinForms populating TreeView from List<myObj>

查看:58
本文介绍了从List< myObj>填充TreeView的C#WinForms的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的课程结构:

public class L3Message
{
    public int Number { get; set; }
    public string MessageName { get; set; }
    public string Device { get; set; }
    public string Time { get; set; }
    public string ScramblingCode { get; set; }

    public List<Parameter> Parameters { get; set; }

    public L3Message()
    {
        Parameters = new List<Parameter>();
    }
}

public class Parameter
{
    public int numOfWhitespaces { get; set; }

    public string ParameterName { get; set; }
    public string ParameterValue { get; set; }

    public Parameter Parent { get; set; }
    public List<Parameter> SubParameters { get; set; }

    public Parameter()
    {
        SubParameters = new List<Parameter>();
    }
}

因此,作为我方法之一的返回类型,我有 L3Messages ( List< L3Message> )的 List 将其映射到 WinForms 中的 TreeView (从该 List 填充 TreeView ).

So, as return type from one of my Methods I have List of L3Messages (List<L3Message>), and I need to map that to TreeView in WinForms (populate TreeView from that List).

请注意,我的对象树可以比一个层次深(因为Parameter类具有prop List< Parmae​​ter>(Parameter对象的列表,与根参数对象相同的结构)),所以意味着递归之类.

Please notice that tree of my objects can be deeper than one level (becouse class Parameter have prop List < Parmaeter > (List of Parameter object, same structure as root parameter object)), so that means recursion or something like.

这里是一棵树的图片,但是这棵树是基于空白在文本文件中创建的,所以这里是所有参数,在我的树中,我只需要L3Message对象列表中的一个即可.

Here is pic of tree, but this tree is created from text file base on whitespaces, so here is all Parameters, in my tree I need only one from List of L3Message objects.

http://imageshack.us/photo/my-images/803/treeviewmessage.png/

我确定我的TreeView必须是这样的:

I'm sure that my TreeView need to be something like this:

L3Message.Number: L3Message.MessageName
+L3Message.Time
+L3Message.Device
+L3Message.ScramblingCode
+L3Message.Parameters[0]
++Parameter.ParamaeterName: Parameter.ParameterValue
++ (same as above)
L3Message.Number: L3Message.MessageName
+L3Message.Time
+L3Message.Device
+L3Message.ScramblingCode
+L3Message.Parameters[0]
++Parameter.ParamaeterName: Parameter.ParameterValue (in this occasion Value is null )
+++SubParameter.ParameterName: SubParameter.ParameterValue

类似的东西

如果可能的话,我想在单独的线程中进行.

If possible, I would like to that in separate thread.

我该如何实现?

推荐答案

我设法解决了这个问题,但是我认为这不是优化的,没有单独的线程.是否有人可以修改我的代码以使其性能更好并添加单独的线程?

I managed to solve this, but I think that is not optimize and there is no separate thread. If anyone can modify my code to perform better and add separate thread?

解决方案:

foreach (L3Message message in por)
            {
                treeViewMessages.Nodes.Add(message.Number + ": " + message.MessageName);
                treeViewMessages.Nodes.Add("Time: " + message.Time);
                treeViewMessages.Nodes.Add("MS: " + message.Device);
                treeViewMessages.Nodes.Add("Scrambling Code: " + message.ScramblingCode);

                foreach (Parameter param in message.Parameters)
                {
                    TreeNode tnRootParam = new TreeNode();

                    //tnRootParam.Nodes.Add(param.ParameterName + ": " + param.ParameterValue);
                    if (param.SubParameters.Count != 0)
                    {
                        CreateTreeNodes(param, tnRootParam);
                        tnRootParam.Text = param.ParameterName;
                        treeViewMessages.Nodes.Add(tnRootParam);
                    }
                    else
                    {
                        tnRootParam.Text = param.ParameterName + ": " + param.ParameterValue;
                        treeViewMessages.Nodes.Add(tnRootParam);
                    }


                }
                treeViewMessages.Nodes.Add("---------------------------------------------------------------------");
            }

private void CreateTreeNodes(Parameter parameter, TreeNode tnRootParam)
    {

        if (parameter.SubParameters.Count == 0)
        {
            tnRootParam.Nodes.Add(parameter.ParameterName + ": " + parameter.ParameterValue);
        }
        else
        {
            foreach (Parameter subparam in parameter.SubParameters)
            {
                CreateTreeNodes(subparam, tnRootParam);
            }  
        }
    }

这篇关于从List&lt; myObj&gt;填充TreeView的C#WinForms的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆