我目前正在使用这个http://blogs.sitepoint.com/hierarchical-data-database-2/方法来存储我的数据。
我当前的数据库行如下所示:
姓名 | 节点左 | 节点右 | 节点级别
主页 | 1 | 6 | 1
内容A | 2 | 5 | 2
内容B | 3 | 4 | 2
关于 | 7 | 8 | 1
现在我使用 ASP.NET 中继器使用列表和 jsTree 输出数据:
<asp:Repeater ID="rptContentSectionGetAll" runat="server">
<HeaderTemplate>
<div id="contentSectionTree">
<ul>
<li id="contentSectionTreeRoot" rel="root"><a href="#">Root</a>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li id='<%# Eval("ID") %>'>
<a href="#"><%# Eval("name") %></a>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</li>
</ul>
</div>
</FooterTemplate>
</asp:Repeater>
我需要从后面的代码ItemTemplate
中用 all<li>
和 nested替换里面的内容。<ul>
这是我当前的代码:
private DataTable RepeaterDataSource()
{
ContentSectionBAL cBAL = new ContentSectionBAL();
DataTable dTable = new DataTable();
try
{
dTable = cBAL.Load();
int counter = 1;
var htmlList = "";
for (int i = 0; i < dTable.Rows.Count; i++)
{
htmlList = "<li rel='folder' id='" + dTable.Rows[i]["ID"] + "'>";
htmlList += "<a href='#'>" + dTable.Rows[i]["name"] + "</a>";
if (Convert.ToInt32(dTable.Rows[i]["nodeLevel"]) > counter)
{
htmlList = "<ul>";
for (int j = 0; j < dTable.Rows.Count; j++)
{
if (Convert.ToInt32(dTable.Rows[i]["nodeLevel"]) > counter + 1)
{
htmlList += "<li rel='file' id='" + dTable.Rows[j]["ID"] + "'>";
htmlList += "<a href='#'>" + dTable.Rows[j]["name"] + "</a>";
htmlList += "</li>";
}
}
htmlList += "</ul>";
}
htmlList += "</li>";
counter = counter + 1;
}
}
catch (Exception ee)
{
Session["message"] = ee.Message.ToString();
Session["messageType"] = "error";
}
return dTable;
}
在这个函数之后不久,我通过执行以下操作来绑定它:
private void BindRepeater()
{
rptContentSectionGetAll.DataSource = RepeaterDataSource();
rptContentSectionGetAll.DataBind();
}
所有没有子节点的常规节点输出:<li>name</li>
所有有子节点的节点都需要在某种循环中输出它的所有子节点:
<li><ul><li></li></ul><li>
我的问题: 1. 循环这种类型的数据以获得正确输出的正确方法是什么?2. 如何在中继器中成功输出?[回答]
我知道我所拥有的一切都行不通,但我的大脑开始思考这一切。任何帮助将不胜感激。
如果您需要其他任何东西,请告诉我,但这应该是它。
来吧伙计们,我需要条件或数学方面的帮助才能以正确的顺序获取我想要的东西。