c# treeview定位节点

Mr_Fang 2024-12-03 04:44:22
最佳回答
1添加三个控件:richtextbox,button,treeview思路:1.查询输入的条件在数据库里有没有,如果没有提示没有2.如果有,把此结果保存下来3.取出结果里的第一条记录,并定位(更改查找到的节点的字体颜色为红色),再把结果中已经查询到的记录删除(避免重复查询到同一个结果)4.如果用户没有更改搜索条件,直接点击搜索,则跳到第3步,直到搜索完毕5.如果用户更改搜索条件,则跳到第2步2部分代码如下: #region 内部字段,查询用 /// <summary> /// 保存查询到的节点的color信息,用于还原 /// </summary> private color _querycolor { get; set; } /// <summary> /// 保存查询的数据 /// </summary> private datatable _dtquerynode { get; set; } /// <summary> /// 保存查询的条件 /// </summary> private string _querystring { get; set; } /// <summary> /// 查询状态 true:查询条件改变,false查询条件没变 /// </summary> private bool _querystatu { get; set; } #endregion3/// <summary> /// 首次加载,全部加载 /// </summary> private void loadtype() { //实例化一个treenode,名字是app.config文件里设置的 //configurationmanager,这个类需要添加引用system.configuration treenode treenode = new treenode(configurationmanager.appsettings["treenodetitle"]); //设置tag为-1方便识别是否是根节点 treenode.tag = "-1"; //设置name为0,方便识别数据库里的父节点 treenode.name = "0"; //加载全部 loadtype(0, treenode); //清空控件节点数据,避免数据重复添加 treeview_type.nodes.clear(); //添加控件节点数据 treeview_type.nodes.add(treenode); }4/// <summary> /// 加载类型名称,递归全部加载 /// </summary> /// <param name="_typeparentid">父节点</param> /// <param name="treenode">treenode</param> /// <returns></returns> private void loadtype(int _typeparentid,treenode treenode) { th**.text = configurationmanager.appsettings["appname"]; // treenode.nodes.clear(); datatable dt = picturedboperator.getdataset( string.format("select type_id,type_name from type where type_parent_id={0} order by type_name", _typeparentid)); if (dt.rows.count>0) {//检查是否有类型数据 treenode tn = **; //读取数据,并写入treeview foreach (datarow item in dt.rows) { tn = new treenode(item["type_name"].tostring()); tn.name = item["type_id"].tostring(); //节点下有图片,这个用于判断是否是图片 tn.tag = "t"; loadtype(int.parse(item["type_id"].tostring()), tn); treenode.nodes.add(tn); } } }5/// <summary> /// 查询类型,根据类型名称 /// </summary> /// <param name="typename">类型名称</param> private void loadtype(string typename) { //直接在treeview里查询 if (typename == "") {//条件为空时,调出所有的类型 loadtype(); return; } th**.text = configurationmanager.appsettings["appname"]; try { if (_querystatu) {//条件变化时 //先从数据库里查询到相关类型 string strsql = string.format("select * from type where type_name like '%{0}%' order by type_name,type_id asc", typename); //保存查询出来的数据 _dtquerynode = picturedboperator.getdataset(strsql); //保存查询条件,用于判断是否更改了查询条件 _querystring = typename; } //判断是否查询到数据 if (_dtquerynode != ** && _dtquerynode.rows.count > 0) {//如果查询得到有数据 #region //取出第一条查询到的数据 datarow dr = _dtquerynode.rows[0]; //调用方法查找到相应的treenode treenode tn = findtreenode(dr["type_name"].tostring(), treeview_type.nodes[0]); //保存treenode原始字体颜色,因为下面把找到的treenode更改了颜色 _querycolor = tn.forecolor; //更改查找到的treenode的颜色为红色 tn.forecolor = color.red; //设置控件选中的节点为查找到的节点 treeview_type.selectednode = tn; //展开节点,这个暂时不知道是怎么会事,会把所有的节点都展开了 treeview_type.selectednode.parent.expandall(); //移除已经查找到的条件 _dtquerynode.rows.remove(dr); #endregion } else { **box.show(string.format("{0}{1}", configurationmanager.appsettings["searchtypeerror**"], typename)); } } catch (exception ex) { **box.show("查询出错:" + ex.**); } } 6 /// <summary> /// 按钮click事件搜索类型,并重新显示到树结构里 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_search_click(object sender, eventargs e) { //还原被改变为node if (_querycolor != ** && treeview_type.selectednode != **) { treeview_type.selectednode.forecolor = _querycolor; } //如果查询条件不为空且查询条件不变时,更改状态为false,表示没有更改条件 _querystatu = (_querystring != "" && _querystring == richtextbox_search.text.trim()) ? false : true; loadtype(richtextbox_search.text.trim()); } 7 /// <summary> /// 递归查询节点,来源网络 /// </summary> /// <param name="typename">要查询的节点内容</param> /// <param name="tnparent">treenode</param> /// <returns></returns> private treenode findtreenode(string typename, treenode tnparent) { if (tnparent == **) return **; //这里也可以用tnparent.text==typename //因为在调用它的方法那里, //已经是查询到的节点的完整内容 if (tnparent.text.indexof(typename) != -1) return tnparent; treenode tnret = **; //循环tnparent的子节点 foreach (treenode tn in tnparent.nodes) {//调用自己 tnret = findtreenode(typename, tn); //如果找到就跳出循环 if (tnret != **) break; } return tnret; }8数据库表typecreate table [dbo].[type] ( [type_id] int identity (1, 1) not **, [type_name] nvarchar (500) **, [type_mem] nvarchar (50) **, [type_parent_id] int not **);9测试数据set identity_insert [dbo].[type] oninsert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (1, n'**工商银行', n'**工商银行', 0)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (3, n'**建设银行', n'**建设银行', 0)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (6, n'**民生银行', **, 0)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (7, n'交通银行', **, 0)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (11, n'交通银行青羊支行', n'交通银行', 7)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (12, n'**工商银行成华支付', n'**工商银行', 1)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (13, n'交通银行成都支行', **, 7)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (14, n'**农业银行', **, 0)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (15, n'**农商银行', **, 0)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (17, n'德阳银行', **, 0)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (18, n'德阳银行成都支行', **, 17)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (19, n'**建设银行人民支行', **, 3)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (20, n'**工商银行青羊支行', **, 1)insert into [dbo].[type] ([type_id], [type_name], [type_mem], [type_parent_id]) values (21, n'**建设银行成都支行', **, 3)set identity_insert [dbo].[type] offend9本页面未经许可获取自百度经验 20210311
汇率兑换计算器

类似问答
汇率兑换计算器

热门推荐
热门问答
最新问答
推荐问答
新手帮助
常见问题
房贷计算器-九子财经 | 备案号: 桂ICP备19010581号-1 商务联系 企鹅:2790-680461

特别声明:本网为公益网站,人人都可发布,所有内容为会员自行上传发布",本站不承担任何法律责任,如内容有该作者著作权或违规内容,请联系我们清空删除。