标题 | 在窗体程序中递归算法实现树形加载地区信息 |
范文 | 过林吉 摘要:该文通过实例,阐述了如何用递归算法,配合TreeView控件来实现目录树形式加载数据,完成窗体程序设计中地区信息的加载,大大提高编程的效率。 关键词:递归算法;TreeView控件;节点;数据加载 中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)36-0086-02 Abstract: This article describes how to use the recursive algorithm by an example, with the TreeView control to achieve the directory tree form on loading data, complete the form of program design on the area of information loading, greatly improve the efficiency of programming. Key words: Recursive Algorithm; TreeView Control; Node; Data Loading 1 背景 在程序设计中,经常要用到“递归”,使用递归算法可以把复杂的问题转化为规模缩小的同类问题的子问题,然后通过递归调用解决。本文将阐述在窗体程序设计中如何通过递归算法来实现数据加载的过程,从而巧妙解决地区加载的问题。 2 递归算法的特点及形式 递归是设计和描述算法的一种有力工具,它在复杂算法的描述中经常采用。递归的目的是简化程序设计,使程序易读,但递归也增加了系统开销。时间上,执行调用与返回的额外工作要占用CPU时间。空间上,随着每递归一次,栈内存就多占用一截。相应的非递归函数虽然效率高,但却比较难编程,而且相对来说可读性差。 能采用递归描述的算法通常有这样的特征:有反复执行的过程,其实就是调用自己;有跳出反复执行过程的条件,即递归出口。将一个解决问题转化为解决他的子问题,而他的子问题又变成子问题的子问题,也就是说存在相同的逻辑归纳处理项。可以使用“归纳法”来实现递归问题,故递归问题的一般解决形式如图1所示。 3 TreeView控件的特点 TreeView控件用来显示信息的分级视图,如Windows里的资源管理器的目录。TreeView控件中的各项信息都有一个与之相关的Node对象。TreeView显示Node对象的分层目录结构,每个Node对象均由一个Label对象和其相关的位图组成。TreeView控件一般用来显示文件和目录结构、文档中的类层次、索引中的层次和其他具有分层目录结构的信息,可以一目了然地表示某种层次关系。 TreeView控件数据源绑定时,树节点信息存储和加载的方法是:创建一个数据表,表中的字段根据实际业务确定,其中一个字段保存节点的编号,记录当前节点的标识。另外一个字段来保存节点在树形控件上要显示的信息,可以设置给Node对象的Text属性。此外还需要一个字段保存当前节点的父节点编号。这两个字段组合起来, 可以记录树上节点间的层次结构,相当于一个“链表”。这样,通过递归算法生成树形结构目录,可以大大提高编程的效率。 4 实例程序实现过程 4.1 实例说明 笔者所举实例的效果是:从后台数据库中把地区信息的数据检索出来放到TreeView视图控件中构建一个树型目录,客户端用户可以操作该树型目录。后端数据库服务器使用SQL Server, 开发语言选用C#语言。表1是地区(Area)数据表中字段的定义。 4.2 具体实现 实例中只使用一个TreeView控件,涉及控件的操作不是本文阐述的重点。以下具体阐述如何使用递归来实现如图2所示的加载地区效果。 1) 后台数据读取代码说明 在主窗体FArea中创建一个方法(ExcuteDataTable),用来从后台数据库中取得需要的数据,方法有两个参数,参数1保存用户所需数据执行的sql语句;参数2保存sql语句中所用到的参数化对象。ExcuteDataTable方法的代码如图3所示。 2) 递归算法读取数据并加载到TreeVie控件的节点 在主窗体FArea中再创建一个方法(LoadArea),方法有两个参数,参数1保存父节点对象;参数2保存父节点对象的编号。 方法的作用:从后台数据库中取得所有地区的数据信息,循环取得每条记录。每条记录包含三个字段,地区编号(ar_id)、地区名称(ar_name)、父节点编号(ar_uid)。每条记录用一个节点对象(TreeNode)来存储,同时对该条记录中父节点编号进行判断,如果父节点编号为0,说明这条记录表示是省份信息,这些节点是根节点直接加到TreeView的根节点目录中,否则的话就加到父节点目录下,作为父节点的子节点。然后递归调用方法(LoadArea),将当前节点对象(TreeNode)以及当前节点地区编号(ar_id)作为参数传入方法。LoadArea方法的代码如图4所示。 3) 主窗体FArea的Load事件中调用方法LoadArea 在主窗体FArea的窗体Load事件中调用方法LoadArea,第一次调用方法时传入参数1为null;参数2为0,即LoadArea(null,0)。 5 结束语 在上述实例中,要将数据库中数据在树型控件中表示,直接用编程实现比较复杂,而采用递归方法生成树型视图,可以提高编程效率。并且要注意的是,节点标识号必须唯一,可将该字段设置为主键。 参考文献: [1] 杨祖龙, 吴国平. 递归算法在樹型视图中的应用[J]. 计算机工程, 2002(11):139-141. [2] 传智播客高教产品研发部. C#程序设计基础入门教程[M]. 北京: 人民邮电出版社, 2014. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。