8

オブジェクトのリストからツリービューを作成する際に問題が発生しています。私はGoogleで解決策を探していました.私の問題に近いトピックを見つけましたが、どれもそれを解決しませんでした.

各オブジェクトのプロパティを持つリストがあります:名前とグループ。

以下のようにツリービューを作成したいと思います。

+---Group 1
|   |
|   +--------object.Name <-- 
|   +--------object.Name <-- all objects with object.Group = Group 1
|   +--------object.Name <--
|
+---Group 2
|   |
|   +--------object.Name <-- 
|   +--------object.Name <-- all objects with object.Group = Group 2
|   +--------object.Name <--
|

等々。

ありがとう。

4

5 に答える 5

3

とてもうまくいきました、ありがとう。以下のように、else の最初と最後に数行追加しました。

private void PopulateTreeView()
    {
        ListOfObjectsSorted = ListOfObjects.OrderBy(r => r.Group).ToList();
        var topNode = new TreeNode("Select all");
        treeView1.Nodes.Add(topNode);
        string currentGroup = ListOfObjectsSorted.First().Group;
        var treeNodes = new List<TreeNode>();
        var childNodes = new List<TreeNode>();
        foreach (Object obj in ListOfObjectsSorted )
        {
            if (currentGroup == rule.Group)
                childNodes.Add(new TreeNode(obj.Name));
            else
            {
                if (childNodes.Count > 0)
                {
                    treeNodes.Add(new TreeNode(currentGroup, childNodes.ToArray()));
                    childNodes = new List<TreeNode>();
                }
                childNodes.Add(new TreeNode(obj.Name));
                currentGroup = obj.Group;
            }
        }
        if (childNodes.Count > 0)
        {
            treeNodes.Add(new TreeNode(currentGroup, childNodes.ToArray()));
        }
        treeView1.Nodes[0].Nodes.AddRange(treeNodes.ToArray());
    }
于 2013-05-06T11:46:14.920 に答える
2

あなたの問題は技術的なものですか、それとも単にアプローチする方法ですか? object.Group で並べ替え、グループが変更されるたびに最上位ノードを作成できます。

編集: 以下にいくつかのサンプル コードを示します。テストしていないので、ガイドラインとして扱ってください。

string currentGroup = null;
List<TreeNode> treeNodes = new List<TreeNode>();
List<TreeNode> childNodes = new List<TreeNode>();
foreach (BusinessObject obj in objectList)
{
    if (currentGroup == obj.Group)
        childNodes.Add(new TreeNode(obj.Name));
    else
    {
        if (childNodes.Count > 0)
        {
            treeNodes.Add(new TreeNode(currentGroup, childNodes.ToArray()));
            childNodes = new List<TreeNode>();
        }
        currentGroup = obj.Group;
    }
}
if (childNodes.Count > 0)
{
    treeNodes.Add(new TreeNode(currentGroup, childNodes.ToArray()));
}
treeView.Nodes.AddRange(treeNodes.ToArray());
于 2013-05-03T09:34:54.740 に答える