C#在组合框中实现树形结构数据

2016-08-12 02:15葛玉曾垂振杨云飞
中国新通信 2016年13期

葛玉 曾垂振 杨云飞

【摘要】 本文通过分析了如何在C#中的组合框控件中实现多层次的树形结构列表数据,使其具有TreeView的功能与特性,并以创建一个树形结构列表的用户控件为例详细阐述了实现方法。

【关键词】 组合框 树形结构 C# TreeView

C#是一种基于现代面向对象设计方法的语言,它是基于C语言和Microsoft.NET平台开发的,它具有简单、现代、通用的特点,它让程序员可以快速地编写各种基于Microsoft. NET平台的应用程序。组合框combox是一个常用控件,通常用作选择器,在Visual Studio 2008软件中,组合框有两种方式,一种是不可输入的下拉列表,一种是带输入框的下拉列表框,无论是哪一种方式,其下拉列表都是单一的项目列出,各项目之间为并列关系,如果想在组合框中实现带层次关系的下拉选择项,以组合框自带的属性无法实现。本文将通过一个全国行政区域选择的实例,介绍如何在Visual Studio 2008中实现带树形结构下拉选择项的组合框,数据库采用SQL Server2005。

一、数据表设计

需要实现树形结构的数据源是全国行政区域,分为省市区三级,主要有2个字段,即代码(DM),区域名称(MC),以代码来区分省、市、区的层级关系,两位代码为一层,如:北京市为11,市辖区为1101,东城区为110101,北京市下辖县为1102,密云县为110228;以代码的位数来区分行政区域树中各节点的位置。全国行政区划表结构如表1所示。

二、创建用户控件UserControls

用户控件UserControls就是用户自定义的控件,其好处就是代码的复用性能够在多个项目中调用该控件,将带有树形结构数据的组合框创建为用户控件,在需要的时候可以自由调用。

在Visual Studio 2008设计器中,添加用户控件,起名为UcCombTree,系统会自动生成一个UcCombTree.cs的类,在代码编辑器中,将其继承类改为ComboBox,使该用户控件具有组合框ComboBox的特性,具体代码如下所示:

public partial class UcCombTree : ComboBox

三、构造控件属性及事件

用户控件创建后,必须在函数中构造与控件相对应的属性及事件,以方便在其它地方使用。针对组合框的特性,必须要构造的事件有下拉列表展开DropDown事件,具体代码如下:

ToolStripDropDown dropDown;

在下拉列表中的选项为树形结构,即应该有TreeView的特性,所以相应的也需要构造与TreeView有关的事件,包括有树节点双击DoubleClick,选中树节点SelectNode,通过代码执行完成后,重新生成解决方案,在Visual Studio 2008设计器的工具箱中出现一个新的组件UcCombTree.

四、带树形结构下拉选择项组合框的实现

将组件UcCombTree拖动到程序界面中,呈现出来的样式为组合框样式,如图1所示。

下面要解决的问题就是将行政区划数据表中的内容添加到UcCombTree的下拉列表中。在前面设计中,已经在用户控件UcCombTree中添加了与TreeView相关的属性与事件,在构造行政区划树结构时,可直接使用TreeView的特性,将数据内容加载到TreeView上。可构造创建树的函数CreatTree,函数中设定两个参数,一个为目标树,另一个为数据来源。因为用户控件UcCombTree也具有TreeView的特性,所以目标树即可设定为UcCombTree,数据来源采用DataTable。函数在执行过程中,采用遍历的方法,在数据表从前往后依次读取每一个数据,首先依据行政区划代码的长度来判断该点属于哪一节节点,2位则为第一级,4位则为第2级,6位则为第3级;如果某个数非第一级节点,使用截取函数,获取该代码的前2位以判断其上级节点位置,按此方法将数据表中的所有数据读取完毕。

实现算法如下:

{

遍历数据表中的所有数据;

{

读取行政区划代码;

读取行政区划地域名称;

在树节点上记录地域代码和地域名称;

If(代码长度为2)

{

则增加为第一层节点;

}

Else

{

找到该代码的上一级代码,添加为上一级代码的子节点;

}

}

带树形结构的组合框在程序中的应用如图2所示。每个节点都对应数据库中的代码与名称两个字段,使用数据时,如果需要地域名拼接,可把需要的节点名称连接起来;如果不拼接,读取当前节点名即可。

五、 结束语

在C#中利用用户控件构建成带有树形结构数据的组合框,将复杂的算法形成函数在用户控件类中实现,在需要反复调用时,只需要按照数据的规律修改数据读取的方法即可。用户控件与数据库的有效结合也加快了程序运行的速度。

参 考 文 献

[1] 郭忠南,层次结构数据在组合框中树形效果的动态实现,计算机时代,2012.7

[2] 吴文强,用自定义TreeView控件实现层次结构数据浏览功能,电脑编程技巧与维护,2012.9