我有一个名为的表Nodes > (NodeID || ParentID || NodeName)
,它具有类别子类别层次结构。
以下是一些示例表数据:
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
从上面的代码中,我得到了我的面包屑,但我无法将面包屑的第一个元素放入锚中。
第一类
第 2 类
类别 1 > [子类别 1]
类别 1 > [子类别 1] > [子子类别 1]
类别 1 > [子类别 2]
类别 1 > [子类别 1] > [子子类别 1] > [产品 1]
我一直在寻找一种以某种方式让面包屑的第一个元素成为锚点或其他东西的方法,以便我可以获得单击元素的 nodeid。我不确定是否有办法做到这一点,我花了很多时间但无法找到合适的方法。如果有什么可以做的,请建议我,或者我应该使用不同的方法来解决这个问题。
我希望这些数据很清楚,如果您需要任何其他说明,请告诉我。