winform TreeView 搜索 显示与节点相关的上下级节点

灬浪子灬 2014-10-14 10:35:25
TreeView 搜索
要求 显示搜索几点相关的上下级节点信息
...全文
251 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
x1983c 2014-10-24
  • 打赏
  • 举报
回复
lz好像没有把想要得到什么样的结果讲清楚。
於黾 2014-10-15
  • 打赏
  • 举报
回复
为什么要去找无关的节点,相关的不是更好找一些吗 直接找到所有相关的节点 然后整个把treeview给clear掉,重新把这些节点添加上去
灬浪子灬 2014-10-15
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
完全没看懂楼主到底想干什么 如果想知道某个节点的父节点和子节点,可以直接上treeview里找 或者通过它的数据源去查询
 /// <summary>
        /// 搜索
        /// </summary>
        /// <param name="node"></param>
        /// <param name="value"></param>
        private void SelectChildNodes(TreeNode node, string value)
        {
            if (node.Nodes.Count == 0) //叶子的Count就是0
            {
                if (!node.Text.Contains(value))
                {
                    _nodeList.Add(node);
                }
            }
            else
            {
                foreach (TreeNode childNode in node.Nodes)
                {
                    SelectParentNodes(childNode, value);
                }
            }
        }
        /// <summary>
        /// 在父节点中搜索
        /// </summary>
        /// <param name="node"></param>
        /// <param name="value"></param>
        private void SelectParentNodes(TreeNode node, string value)
        {
            //如果父节点是搜索的节点  子节点全部显示

            if (node.Nodes.Count == 0)//叶子的Count就是0
            {
                if (!node.Text.Contains(value))
                {
                    _nodeList.Add(node);
                }
            }
            else
            {
                foreach (TreeNode childNode in node.Nodes)
                {
                    SelectParentNodes(childNode, value);
                }
            }
        }
调用
 foreach (TreeNode node in treeMetadataValue.Nodes)
            {
                SelectChildNodes(node, toolStripTxtValue.Text.Trim());
            }
            //  SetTreeViewData(_keyScopeList, null, false);
            if (_nodeList.Count > 0)
            {
                foreach (var node in _nodeList)
                {
                    //移除与搜索结果无关的节点
                    treeMetadataValue.Nodes.Remove(node);
                }
            }
因为winformTreeView没有隐藏节点的功能所以我的想法是先把无关的节点找出来,最后在移除掉 不过怎么写都不对
於黾 2014-10-15
  • 打赏
  • 举报
回复
完全没看懂楼主到底想干什么 如果想知道某个节点的父节点和子节点,可以直接上treeview里找 或者通过它的数据源去查询
mysz_2361014883 2014-10-15
  • 打赏
  • 举报
回复
给TreeView控件添加复选框并显示相关上下级节点 //将数据绑定到控件分类科目 SqlConnection conn; //创建SqlConnection对象 SqlCommand cmd; //创建SqlCommamd对象 SqlDataAdapter sda; //创建SqlDataAdapter对象 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack)//如果页面第一次加载 { string str = System.Configuration.ConfigurationManager.AppSettings["conn"].ToString(); tvcourse.ShowCheckBoxes = TreeNodeTypes.Leaf;//节点添加复选框 conn = new SqlConnection(str); //建立连接 cmd = new SqlCommand("select distinct(courseType) from tbCourse", conn); sda = new SqlDataAdapter(cmd); //实例化SqlDataAdapter对象 DataSet ds = new DataSet(); sda.Fill(ds); ddlType.DataSource = ds; ddlType.DataTextField = "courseType"; ddlType.DataBind(); TreeNode TN = new TreeNode(ddlType.SelectedItem.Text); cmd = new SqlCommand("select * from tbCourse where courseType='"+ddlType.SelectedItem.Text+"'", conn); sda = new SqlDataAdapter(cmd); ds = new DataSet(); sda.Fill(ds); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { TN.ChildNodes.Add(new TreeNode(ds.Tables[0].Rows[i]["courseName"].ToString())); } tvcourse.Nodes.Add(TN); } } //将分类下的科目绑定到TreeView控件 protected void ddlType_SelectedIndexChanged(object sender, EventArgs e) { tvcourse.Nodes.Clear(); string str = System.Configuration.ConfigurationManager.AppSettings["conn"].ToString(); conn = new SqlConnection(str); TreeNode TN = new TreeNode(ddlType.SelectedItem.Text); cmd = new SqlCommand("select * from tbCourse where courseType='" + ddlType.SelectedItem.Text + "'", conn); sda = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); sda.Fill(ds); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { TN.ChildNodes.Add(new TreeNode(ds.Tables[0].Rows[i]["courseName"].ToString())); }//codego.net/tags/11/1/ tvcourse.Nodes.Add(TN); tvcourse.ExpandAll(); } //点击显示节点内容protected void Button1_Click(object sender, EventArgs e) { lblinfo.Text = ""; if (tvcourse.CheckedNodes.Count > 0) { foreach (TreeNode childNode in tvcourse.CheckedNodes) { lblinfo.Text += childNode.Text + " "; } } }
gxingmin 2014-10-14
  • 打赏
  • 举报
回复
递归搜索到节点,然后获取这个节点的上下级节点就简单了
bdmh 2014-10-14
  • 打赏
  • 举报
回复
你这个除了遍历+递归查找,没看出有什么难以实现的功能,查找代码百度上很多
灬浪子灬 2014-10-14
  • 打赏
  • 举报
回复
目前实现的效果

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧