在TreeView控件中实现节点搜索遇到的问题

问题描述

在项目中使用TreeView通过DataBinding的方式展示数据,后来发现数据量稍微有点大的话,在呈现的时候就要耗很多时间,导致用户体验很差,后来通过UIV的方式解决了这个问题(设置VirtualizingStackPanel.IsVirtualizing="True"VirtualizingStackPanel.VirtualizationMode="Recycling")但这时带来一个问题,由于Tree上有搜索节点的功能,在使用了UIVirtualization之后,如果我从没有通过滚动条拖动到那个节点的位置(UIV部分加载,只加载你看到的那部分数据,所以从没有拖过去的话,这部分节点也就从未生成),这个时候我把我搜索到的节点的IsSelected属性设置为True的话,是没有用的,请问各位前辈要如何解决这个问题呢?

解决方案

解决方案二:
修改TreeView中的节点文本privatevoidModifiedNode_Load(objectsender,EventArgse){treeView1.LabelEdit=true;//设置treeView1的可编辑属性为trueNexusConnection=newOleDbConnection(ConnectString);//初始化一个数据库连接对象NexusConnection.Open();//打开数据库连接stringSelectString="select产品编号,产品名称fromWare";//定义一个数据库查询字符串NexusCommand=newOleDbCommand(SelectString,NexusConnection);//初始化执行SQL语句对象OleDbDataReaderNexusReader=NexusCommand.ExecuteReader();//定义一个数据读取器treeView1.Nodes.Clear();//清空treeView1原有的数据内容TreeNoderoot=treeView1.Nodes.Add("产品名称");//为treeView1控件添加根节点while(NexusReader.Read())//开始读取数据中的内容{TreeNodetempNode=//将数据库中的数据字段变换为treeView控件的节点newTreeNode(NexusReader[1].ToString());root.Nodes.Add(tempNode);//向根节点上添加数据库字段}NexusReader.Close();//关闭数据读取器root.ExpandAll();//展开treeView1中的所有节点NexusConnection.Close();//关闭数据库连接}//CodeGo.net/privatevoidtreeView1_AfterLabelEdit(objectsender,NodeLabelEditEventArgse){if(e.Label!=null&&e.Label!="")//当选定项的内容存在且不为空时{NexusConnection.Open();//打开数据库连接stringRefreshString="updateWareset产品名称='"+//定义一个数据库连接字段e.Label+"'where产品编号="+(e.Node.Index+1).ToString();NexusCommand=newOleDbCommand(RefreshString,NexusConnection);//定义一个执行SQL语句的对象NexusCommand.ExecuteNonQuery();//执行SQL语句NexusConnection.Close();//关闭数据库连接MessageBox.Show("修改成功!","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);//弹出修改成功的提示信息}}
解决方案三:
引用楼主shyhacker的回复:

在项目中使用TreeView通过DataBinding的方式展示数据,后来发现数据量稍微有点大的话,在呈现的时候就要耗很多时间,导致用户体验很差,后来通过UIV的方式解决了这个问题(设置VirtualizingStackPanel.IsVirtualizing="True"VirtualizingStackPanel.VirtualizationMode="Recycling")但这时带来一个问题,由于Tree上有搜索节点的功能,在使用了UIVirtualization之后,如果我从没有通过滚动条拖动到那个节点的位置(UIV部分加载,只加载你看到的那部分数据,所以从没有拖过去的话,这部分节点也就从未生成),这个时候我把我搜索到的节点的IsSelected属性设置为True的话,是没有用的,请问各位前辈要如何解决这个问题呢?

加载TreeNode之前,数据应该保存在内存中的数据模型里。搜索应该在内存的数据模型里的数据集合进行,而不是在控件上。

时间: 2024-10-28 03:59:33

在TreeView控件中实现节点搜索遇到的问题的相关文章

WPF中TreeView控件在选中节点后如何获取其父节点,再父节点信息

问题描述 winform中TreeView控件中,在选中某个节点后,可以用e.Node.Parent来获取其父节点信息,再父节点可以用e.Node.Parent.Parent,而在WPF中此方法似乎不行,如,在选中某个节点后TreeViewItemitem=(TreeViewItem)treeCourseInfo.SelectedItem;可以获取该节点的信息if(item.Header.ToString()=="科目信息",但是不知该如何获取其父节点,再父节点.....信息,各位有谁

在visual studio2008中treeviewer控件中的节点如何连接数据库?有不用代码的方法么?

问题描述 在visualstudio2008中treeviewer控件中的节点如何连接数据库?有不用代码的方法么?

C#怎么在treeview控件中显示comboBox中选定的父节点以及其所有的子节点?

问题描述 如题,需要补充一下,treeview并不是在comboBox中的,他们两个是独立的 解决方案 解决方案二:你这无非就是做combobox的选择改变时间,然后给treview控件绑定赋值.

TreeView控件中实现拖拽的功能

  #region 节点拖拽事件        //当用户开始拖动节点时        private void tvModel_ItemDrag(object sender, ItemDragEventArgs e)        {            TreeNode selectNode = e.Item as TreeNode;            this.tvModel.SelectedNode = selectNode;             this.form.DoDra

在vs.net2005中,如何获取treeview控件中被选中节点的关键字。

问题描述 DimzsqlstrAsStringzsqlstr="select*frombzliulanwhere环节编号='"&节点关键字的值&"'" 解决方案 解决方案二:在afterselect事件中用e.Node.Text获取解决方案三:谢谢二楼的.成功了!解决方案四:Node的Name属性,作为Key来使用的.可以使用它来搜索定位解决方案五:Treeview.SelectedNode.Text

为TreeView控件添加的节点,为何在指定了NavigateUrl属性后,SelectedNodeChanged不触发了?

问题描述 asp:TreeViewid="ListTreeView"runat="server"OnSelectedNodeChanged="Select_Change"ExpandDepth="0"ForeColor="Black"Width="100%"ShowLines="True"EnableViewState=false></asp:TreeVi

c# winform怎么设置TreeView控件的某个节点为只读

问题描述 TreeView节点设置成了CheckBox类型,我想让某个节点只读,能做到吗? 解决方案 解决方案二:自带的Treeview估计不行吧,你可以尝试自定义Treeview解决方案三:在TreeView的AfterCheck事件进行判断,如果那个节点是希望只读的,设置e.Node.Checked=false;

ASP.NET中TreeView控件使用小结

asp.net|treeview|控件 中国IT动力,最新最全的IT技术教程最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 未整理篇 | 技术讨论 ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql 服务器 Win2000

在.NET开发中灵活使用TreeView控件

treeview|控件 ASP.NET真正有用的特性就是其可扩充性.世界各地的开发人员都可以创建自己的自定义控件,这种自定义控件可以方便地在你自己的过程中进行定义.其中,Internet Explorer Web Controls就是由微软公司在标准的ASP.NET控件之外创建的这样一个集合. Windows资源管理器中的驱动器和其下的文件及文件夹就是按照一种层次结构来安排的,在这个控件集中有一个treeview控件为我们提供了一种按层次结构显示信息的方式.treeview控件包含了称做"节点&