在树形视图中更改节点颜色

时间:2018-08-22 18:26:01

标签: c# asp.net treeview

我有一个带有节点的树视图。我正在实现通过树视图节点的搜索。一旦找到匹配的节点,则应更改节点颜色。它工作正常,但问题是在先前搜索的节点中搜索新节点时颜色也会改变。任何帮助将不胜感激。谢谢。

protected void btn_search_Click(object sender, EventArgs e)
   {
       try
       {
           FindNodesByString();

       }

       catch { }
   }

   private void FindNodesByString()
   {
       foreach (TreeNode currentNode in tv_AccountView.Nodes)
       {
           FindNodeByString(currentNode);
       }
   }

   private void FindNodeByString(TreeNode parentNode)
   {
       FindMatch(parentNode);
       foreach (TreeNode currentNode in parentNode.ChildNodes)
       {
           //currentNode.Text = currentNode.Text;
           FindMatch(currentNode);
           FindNodeByString(currentNode);
       }
   }
  private void FindMatch(TreeNode currentNode)
   {
       if (currentNode.Text.ToUpper().Contains(txt_searchbyname.Text.ToUpper()))
       {
           currentNode.Expand();
           currentNode.Text = "<div style='background- 
           color:#ffffcc;color:#ff9900;'>" + currentNode.Text + " 
          </div>";

       }
       else
       {
           currentNode.Text = currentNode.Text;
           // currentNode.Collapse();
         //  currentNode.ShowCheckBox = false;
       }
   }

1 个答案:

答案 0 :(得分:0)

找到节点后,您会将其文本设置为带有颜色的html。如果找不到html,则永远不会删除它。

   else
   {
       currentNode.Text = currentNode.Text; //need to remove the HTML tags (if any) here
       // currentNode.Collapse();
     //  currentNode.ShowCheckBox = false;
   }

要完成删除HTML的操作,您可以:

  • 使用this answer的建议,或浏览其他答案。
  • 如果您有文字的原始来源,可以从那里获取。
  • 您可以将原始文本存储在以节点为键的字典中,然后将其备份以进行重置。

要执行简单的正则表达式,它看起来像这样:

   else
   {
       //remove the HTML tags (if any) here
       currentNode.Text = Regex.Replace(currentNode.Text, "<.*?>", String.Empty);
       // currentNode.Collapse();
     //  currentNode.ShowCheckBox = false;
   }