0

我从 XML 文件中加载了一个树视图数据。当用户在文本框中输入内容时,我想执行搜索。这是正确的做法吗??我只想过滤数据。请给我看一些例子。

下面的代码不起作用。

 textBox1.Enter += new EventHandler(txtSearch_TextChanged);

 private void txtSearch_TextChanged(object sender, EventArgs e)
        {

            foreach (TreeNode node in this.treeView1.Nodes)
            {

                if (node.Text.ToUpper().Contains(this.textBox1.Text.ToUpper()))
                {

                    treeView1.SelectedNode = node;

                    break;

                }
  }
4

3 回答 3

2

我认为另一个问题可能是您提供的代码仅查看顶级节点。您将需要创建一个方法,该方法将递归地遍历节点的子节点,直到找到匹配项。像这样的东西:

private TreeNode FindNode(TreeNode node, string searchText)
{
  TreeNode result = null;

  if (node.Text == searchText)
  {
    result = node;
  }
  else
  {
    foreach(TreeNode child in node.Nodes)
    {
       result = FindNode(child, searchText);
       if (result != null)
       {
         break;
       }
    }  
  }
  return result;
}
于 2012-09-27T18:05:02.873 回答
2
textBox1.Enter += new EventHandler(txtSearch_TextChanged);

 private void txtSearch_TextChanged(object sender, EventArgs e)
        {

            foreach (TreeNode node in this.treeView1.Nodes)
            {

                if (node.Text.ToUpper().Contains(this.textBox1.Text.ToUpper()))
                {
                    treeView1.Select(); // First give the focus to the treeview control,
                    //doing this, the control is able to show the selectednode.
                    treeView1.SelectedNode = node;

                    break;

                }
  }
于 2012-11-06T19:46:58.070 回答
1

您需要注册文本更改事件:http: //msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.textchanged.aspx

并用于查找特定节点:

treeView1.Nodes.Find()

此处的模式详细信息:http: //msdn.microsoft.com/en-us/library/system.windows.forms.treenodecollection.find

于 2012-06-18T13:37:56.640 回答