我有一个名为Nodes > (NodeID || ParentID || NodeName)
的表,它具有category-subcategory层次结构。
以下是一些示例表数据:
NodeID || ParentID || NodeName
1 || null || All Categories
2 || 1 || Category 1
3 || 1 || Category 2
4 || 2 || Sub- Category 1
5 || 4 || Sub-sub-category 1
5 || 3 || Sub-Category 2
6 || 5 || product 1
我希望将面包屑作为锚点或其他东西,以便我可以直接获取所点击的节点ID。
现在从这个表节点开始,我想根据我在桌子上的位置制作面包屑。
以下是我的尝试:
Dim strCmd As String = "WITH abcd AS ( SELECT nodeid, nodeName, ParentID, CAST(([nodeName]) AS VARCHAR(1000)) AS Path FROM Nodes WHERE parentid = 1 UNION ALL SELECT t.nodeid, t.[nodeName], t.ParentID, CAST(( a.path + ' > ' + '<a href=""products.aspx?id=' + CAST((t.nodeid) as Varchar) + '"">' + t.nodeName + '</a>') AS VARCHAR(1000)) AS Path FROM nodes AS t JOIN abcd AS a ON t.ParentId = a.nodeid )SELECT nodeid,nodename,path FROM abcd"
Using _cmd As SqlCommand = db.GetSqlStringCommand("SELECT * FROM Nodes")
Using _dt As DataTable = db.ExecuteDataSet(_cmd).Tables(0)
_dt.Columns.Add("BreadCrumb")
Using ds1 As DataSet = db.ExecuteDataSet(CommandType.Text, strCmd)
For i As Integer = 0 To _dt.Rows.Count - 1
Dim results = (From myRow As DataRow In ds1.Tables(0).AsEnumerable() Where (myRow.Field(Of Integer)("nodeId") = _dt.Rows(i).Item(0)) Select myRow.Field(Of String)("path")).SingleOrDefault()
_dt.Rows(i).Item(13) = results
Label1.Text += results & " <br/>" 'Just debug code, printing all the breadcrumbs on the page.
Next
End Using
End Using
End Using
从上面的代码中,我得到了我的面包屑,但我无法将面包屑的第一个元素放入锚点。
第1类
第2类
第1类&gt; [子类别1]
第1类&gt; [子类别1]&gt; [子子类别1]
第1类&gt; [子类别2]
第1类&gt; [子类别1]&gt; [子子类别1]&gt; [产品1]
我正在寻找的方法是以某种方式将面包屑的第一个元素作为锚点或其他东西,以便我可以获得被点击元素的nodeid。我不确定是否有办法做到这一点,我花了很多时间但却找不到合适的方法。如果有任何可以做的事情,请建议我,或者我应该使用不同的方法解决问题。
我希望这些数据很清楚,如果您需要任何其他说明,请与我们联系。