0

我有点努力返回给定 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 列表中,我计划使用它进行进一步检查。

有人有建议吗?

4

1 回答 1

2

您的问题有点令人困惑,但也许这会有所帮助。如果可能,您应该尝试使用 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);
}

希望有帮助。

于 2013-09-04T13:31:21.123 回答