我需要从一个数据库表中创建一个菜单结构,该表使用一个 ID 和一个 ParentID 以及一个用于确定节点顺序的 Rank。
Root(ID 1, ParentID 0, Rank 1)
- Node(ID 2, ParentID 1, Rank 1)
- Node(ID 3, ParentID 2, Rank 1)
- Node(ID 4, ParentID 3, Rank 1)
- Node(ID 5, ParentID 3, Rank 2)
- Node(ID 6, ParentID 2, Rank 2)
- Node(ID 7, ParentID 2, Rank 3)
- Node(ID 8, ParentID 1, Rank 2)
- Node(ID 9, ParentID 8, Rank 1)
- Node(ID 10, ParentID 8, Rank 2)
我试图创建一个函数来遍历 SQL 数据并创建此树结构,但我不确定如何处理添加的深度。我可以通过简单地检查它们是否具有 ParentID 来添加第一层节点,我可以在 else 条件下添加第二层节点,但是我不确定如何添加层次结构的以下层。
遍历数据库:
using (var command = new SqlCommand(_Query, _Connection))
{
_Connection.Open();
var _Reader = command.ExecuteReader();
while (_Reader.Read())
{
CreateNode((int)_Reader["MenuID"], (int)_Reader["ParentID"], (int)_Reader["Rank"], _Reader["English"].ToString());
}
_Connection.Close();
}
节点的创建:
private void CreateNode(int id, int parentID, int rank, string text)
{
if(parentID == -1)
{
TreeNode _Node = new TreeNode(text, id.ToString());
Root.Nodes.Add(_Node);
}
if (parentID != -1)
{
foreach (TreeNode _Node in Root.Nodes)
{
if (_Node.Value == parentID.ToString())
{
_Node.ChildNodes.Add(new TreeNode(text, id.ToString()) { ShowCheckBox = true } );
}
}
}
}
目前这不是按等级对节点进行排序
我希望输出 HTML 类似于以下内容:
<ul id="1">
<li>A</li>
<li>
<ul id="2">
<li>B</li>
<li>
<ul id="3">
<li>C</li>
<li>
<ul id="4">
<li>D</li>
</ul>
</li>
<li>
<ul id="5">
<li>E</li>
</ul>
</li>
</ul>
</li>
<li>
<ul id="6">
<li>F</li>
</ul>
</li>
<li>
<ul id="7">
<li>G</li>
</ul>
</li>
</ul>
</li>
<li>
<ul id="8">
<li>H</li>
<ul>
<li>
<ul id="9">
<li>I</li>
</ul>
</li>
<li>
<ul id="10">
<li>J</li>
</ul>
</li>
</ul>
</ul>
</li>
</ul>