我試圖在運行時在層次結構中填充TreeView,但是在我的代碼中發生了錯誤。TreeView層次結構是錯誤地生成的
通常情況下,我應該有許多項目作爲根節點,其次是子項目作爲子節點等等。
比方說,項目1,9,10,62和65是根源或項目。
- 項目#1包含子項目17,24,33,34,35,61,98,...
- 項目#9不包含子項目。
- 項目#10含有子項目2和104
- 項目#62包含子項目63,64,108,109。
- 項目#65再次具有其他子項目。
問題:代碼保持添加到彼此根節點。所以它認爲下一個根節點是前一個節點的子節點。
結果:代碼應該創建帶有子項目的分離根節點(子項目也可以包含子項)。
代碼:
private void button2_Click(object sender, EventArgs e)
{
DbConnector db = new DbConnector();
string str = "";
List<string> lst = db.ReadProjectsTable();
lst.OrderBy(x => x.Count(y => y == '|'));
List<string> newLst = new List<string>();
foreach (var item in lst)
{
string output = "";
foreach (var item2 in item.Split('|', '|'))
{
output += item2 + '-';
}
output = output.Substring(output.IndexOf('-')+1, output.LastIndexOf('-')-2);
newLst.Add(output);
str += output + Environment.NewLine;
}
textBox2.Text = str;
tvProjects.PathSeparator = @"-";
PopulateTreeView(tvProjects, newLst, '-');
}
private static void PopulateTreeView(TreeView treeView, IEnumerable<string> paths, char pathSeparator)
{
TreeNode lastNode = null;
string subPathAgg;
foreach (string path in paths)
{
subPathAgg = string.Empty;
foreach (string subPath in path.Split(pathSeparator))
{
subPathAgg += subPath + pathSeparator;
TreeNode[] nodes = treeView.Nodes.Find(subPathAgg, true);
if (nodes.Length == 0)
if (lastNode == null)
lastNode = treeView.Nodes.Add(subPathAgg, subPath);
else
lastNode = lastNode.Nodes.Add(subPathAgg, subPath);
else
lastNode = nodes[0];
}
}
}
UPDATE:的List<string> lst
的樣本數據| 1 | | 9 | | 10 | | 62 | | 65 | | 67 | | 78 | | 83 | | 86 | | 105 | | 116 | | 125 | | 10 | 2 | | 67 | 4 | | 1 | 17 | | 1 | 24 | | 1 | 33 | | 1 | 34 | | 1 | 35 | | 1 | 61 | | 62 | 63 | | 62 | 64 | | 67 | 68 | | 65 | 69 | | 65 | 70 | | 65 | 71 | | 65 | 72 | | 65 | 75 |
請提供樣本數據 - '名單 LST =新名單 {...};' –
空白意味着列表中的新項目 – SamekaTV
無法解析您的示例數據以提供您想要的結果。輸入數據應該有父母和孩子/孩子。 「1」沒有父母。 「1」的孩子是:「9」,「17」,「33」,「110」,「111」,「128」。 「9」是「10」的父親。 「10」是「62」的父親。 「62」是「65」的父親。 「65」是「63」,「64」,「108」,「109」的父項。 – jdweng