C# 值为正斜杠的FindNode方法TreeView

C# 值为正斜杠的FindNode方法TreeView,c#,asp.net,sharepoint,C#,Asp.net,Sharepoint,我有一个树状视图控件。下面的代码用于查找特定的父节点 TreeView AllProductsTreeView; TreeNode nodeFound = AllProductsTreeView.FindNode("AAA/Sensors"); AAA-类别 传感器-子类别 这可以正常工作,但当子类别值包含正斜杠时会出现问题 TreeView AllProductsTreeView; TreeNode nodeFound = AllProductsTreeView.FindNode("AA

我有一个树状视图控件。下面的代码用于查找特定的父节点

TreeView AllProductsTreeView;

TreeNode nodeFound = AllProductsTreeView.FindNode("AAA/Sensors");
AAA-类别

传感器-子类别

这可以正常工作,但当子类别值包含正斜杠时会出现问题

TreeView AllProductsTreeView;

TreeNode nodeFound = AllProductsTreeView.FindNode("AAA/Sensors/Energy");
AAA-类别

传感器/能源-子类别

在上述情况下,它为nodeFound对象返回一个空值

如何使用带正斜杠的“查找节点”方法查找子类别

提前谢谢

字符“/”具有用于
FindNode
(主/子节点区分)的特殊功能,似乎没有任何方法可以避免它。一个选项是根本不将此字符用于节点名称。如果不想更改名称,可以使用自定义功能补充内置功能,如下代码所示:

string nodePath = "AAA/Sensors/Energy";
TreeNode nodeFound = null;
string[] temp = nodePath.Split('/');
if (temp.Length > 2)
{
    //More than one "/"
    TreeNode mainNode = AllProductsTreeView.FindNode(temp[0]);
    string childPath = nodePath.Substring(temp[0].Length + 1, nodePath.Length - temp[0].Length - 1);
    foreach (TreeNode childNode in mainNode.ChildNodes)
    {
        if (childNode.Value == childPath)
        {
            nodeFound = childNode;
            break;
        }
    }
}
else
{
    nodeFound = AllProductsTreeView.FindNode(nodePath);
}
如您所见,当给定名称包含一个“/”或更少时,此代码仅依赖于
FindNode
;在所有其他情况下,它提取主节点名称,并通过依赖
属性查看其所有子节点(对于该属性,“/”字符不会触发任何特殊功能)

澄清:上述代码可以处理验证以下任何结构的任何情况(独立于子节点名称中的“/”数):

Main_node_without_slashes/Child_node_containing_any_number_of_slashes
Main_node_without_slashes

如果主节点包含正向斜杠,则必须更新此代码,方法是设置一种方式,告诉代码何时应将“/”理解为主要子级区分,何时应将其理解为名称的一部分。

我们不能说它只有一个分隔符。它取决于数据库值。所以它不是固定的。我只讲了一个场景。我们在实现时不知道数据库中的值:(@Kanishka它可以处理任意数量的斜杠;我只是在解释它是如何工作的:如果输入字符串(nodePath)包含一个斜杠(或无斜杠),则直接使用FindNode;否则nodePath被划分为第一个块(主节点)和所有剩余信息(假定为子节点)。此代码适用于以下任何情况:ParentNode/Childnode包含所需的多个斜杠。可接受输入的示例:node1/node2-part1/node2-part2/node2-part3->此代码假定node1是主节点,“node2-part1/node2-part2/node2-part3”那孩子是谁node@Kanishka如果在上面的示例中,您希望node1是主节点,node2-part1是其子节点,node2-part2是node2-part1的子节点,那么它将不起作用:它需要一个主节点+一个子节点(包括所需的任意多个斜杠)。请理解代码,测试它,并确认它按预期工作。如果您想调整它以提供不同的性能,我将帮助您;在任何情况下,请记住,我在编写代码时的意图是向您展示一种解决问题的方法(理想情况下,您应该调整它以满足您的特定需求)。谢谢你的代码。但正如你所说,有一个例子,我需要“node1是主节点,node2-part1是它的子节点,node2-part2是node2-part1的子节点”。它包含在我的任务中。这就是我被卡住的地方。@Kanishka如果你得到这样的东西:node1/node2-part1/node2-part2没有人能确切地说出它的意思(3个节点或2个节点)没有进一步的信息,因此您不能期望计算机确定您甚至无法手动执行的操作。请仔细考虑您想要的内容,并了解您仅有的两个选项:删除所有“/”以及避免问题;或者明确定义什么是主/子节点,并依赖于我建议的代码。但最好不要浪费时间来为无法解决的问题提出解决方案:)