从List< myObj>填充TreeView的C#WinForms [英] C# WinForms populating TreeView from List<myObj>
问题描述
我有这样的课程结构:
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< Parmaeter>(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< myObj>填充TreeView的C#WinForms的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!