循环通过以返回所有必需的节点ID

本文关键字:节点 ID 返回 循环 | 更新日期: 2023-09-27 18:30:11

我有点难以返回给定Treeview中的所有节点ID。

基本上,我有一个函数,它使用给定的NodeID运行对数据库的查询并返回其父节点ID,如下所示,这很好,并向我返回传递的节点ID的父节点ID。

public static string Parent_ID(string NodeID)
{        
   GeneralConnection gc = ConnectionHelper.GetConnection();
   int intNodeID = Convert.ToInt32(NodeID);
   QueryDataParameters para = new QueryDataParameters();
   para.Add("@NodeID", intNodeID);
   int parent = (int)gc.ExecuteScalar("custom.product.searchForParentNodeID", para);
   return Convert.ToString(parent);              
}

现在返回的ParentID实际上是上面Node的NodeID。所以基本上我想使用新获得的ID来获得它的ParentID并保持循环通过表(使用上面的查询),直到我可以获得当前级别内的所有NodeID。显然,我将把这些NodeID存储在StringBuilder列表中,我计划使用它进行进一步的检查。

有人有什么建议吗?

循环通过以返回所有必需的节点ID

您的问题有点令人困惑,但这可能会有所帮助。如果可能的话,您应该尝试使用API而不是自定义查询,以使修复程序/升级在将来更容易。例如,如果你有一个节点ID,并且你想要它的所有兄弟,你可以这样做:

// Version 7 code, untested
var treeProvider = new TreeProvider();
var childNodeId = 1;
// Get the child Node
// Node ID, Culture, Site name
var childNodeDataSet = treeProvider.SelectNodes(childNodeId, null, CMSContext.CurrentSiteName);
if (childNodeDataSet.Items.Any())
{
    // Assuming the child node was found, get the parent ID
    var parentNodeId = childNodeDataSet.Items[0].NodeParentID;
    // Now get the children of the parent, aka the siblings
    // Site name, Culture, Combine with default culture, Where clause, Order by clause
    var siblingNodes = treeProvider.SelectNodes(CMSContext.CurrentSiteName, "/%", null, false, null, "NodeParentID = '" + parentNodeId + "'", null);
}

希望能有所帮助。