数据显示控件(精选七篇)
数据显示控件 篇1
随着移动互联网的快速发展,手机应用所需要展示的数据量也在快速增长。在手机应用中,当从远程服务器端获取的数据量较大,此时根据用户实际需求,为了节省用户网络流量,常常需要选用动态递增方式实现数据显示。由于移动终端手机显示屏的局限性,当显示批量数据时,若由用户自主决定是否加载更多数据,则较为合适且更人性化。
作为Android的一个基本控件,ListView对递增式加载数据提供了很好的支持。本文利用ListView控件的该特性, 以加载批量图片资源为切入口,快捷高效地将网络数据累增呈现在用户面前。
1 Android OS简介
Android是一种基于Linux的自由、且开放源代码的操作系统,主要适用于移动设备,由Google公司和开放手机联盟进行主导与开发。2012 年11 月数据显示,Android占据全球智能手机操作系统市场76% 的份额,中国市场占有率为90% 。
Android系统采用了分层架构,共分为四层[1]。自上而下依次为:
( 1) Applications - 应用程序层。该层提供多个核心应用程序包;
( 2) Application Framework - 应用程序框架层。该层提供一些API框架,供用户调用;
( 3) Libraries & Android Rutime - 运行库层。该层用于提供类库和JAVA运行环境;
( 4) Linux Kernel - 系统内核层。该层为底层,对安全性、内存、进程、驱动进行管理。
2 ListView控件和Adapter
在Android UI设计中,因其可以实现递增加载的特性, 控件ListView是使用非常频繁的View。
ListView由View、适配器、数据三个元素组成,是单个View的集合,每个子View都是一个独立的个体,通常由一个xml指定,并显示一条数据集合[2]。为了能显示批量数据, ListView必须与Adapter进行绑定。Adapter可以看作List- View的数据源,由Adapter传递数据给ListView进行显示,二者之间的关系可如图1 所示。
Adapter又称之为适配器,借助其可将数据和用户界面View实现绑定。Adapter负责创建用来表示每一个条目的子View,并且提供对底层数据的访问[3]。Android提供了多种类型的Adapter,也支持用户自定义适配器,由此而实现List- View控件中的子View元素的布局展示。
3 按页递增显示流程
在实际手机端开发中,当从服务器端获取的数据量较多时,经常需要动态递增( 按页递增) 处理显示。本文采用json传输数据到手机端,再利用Android的ListView控件实现数据的按页递增显示,按页递增处理流程具体则如图2 所示。
由图2 可知,详细的流程步骤分析如下:
( 1) 触发手机端的事件,通过url以get方式发送http请求到服务器端,url中包含页参数;
( 2) 服务器端响应http请求,返回json数据给手机端;
( 3) 解析json数据,将json数据封装成能适配Adapter的数据格式;
(4)将解析的数据绑定到Adapter,并通知Adapter更新;
(5)ListV iew根据要求按页递增显示数据。
4 按页递增显示实现
由于需要实现的是加载批量图片资源,现有Android提供的多种Adapter类不能实现此要求,故必须首先自定义A- dapter类,该类继承Android的基类BaseAdapter。在自定义的Adapter类中,方法getView( ) 里封装item所要呈现的con- vertView对象,即ListView中显示的每个item,且每个item都是布局文件layout的形象展示。通过将布局文件layout加载到方法getView( ) 中的convertView对象,并进行处理,就可以在ListView中展示一个子item。当adpter中绑定批量数据时,该批量数据就会通过子item在ListView中逐一展示出来,且当需要递增显示时,触发按页递增事件后,只需要将服务器返回的数据绑定到Adapter中,并通知其更新,就可显示ListView的递增显示效果。
4. 1 封装数据对象及自定义Adapter类
4. 1. 1 对象封装
本文以商户信息为展示主体,先对需要展示的商户信息封装成Merchant类,以便在后续的数据处理中访问其属性和方法。
4. 1. 2 自定义Adapter类
自定义Adapter类提供数据源模型。该类继承BaseAda- pter基类,重写getView方法,将数据一一匹配。
4. 2 item的布局文件
控件ListView中每一个子item都有相同的布局,以XML文件形式展示,该XML文件定义了子item界面采用的布局和组件[4],布局文件中的控件元素ImageView和TextView为需要展示的数据提供载体。
4. 3 获取json串并解析返回数组
Json串是一种轻量级的数据交换格式,本文选取json串作为Android移动终端与远程Web server的传输媒介,易于阅读和编写,同时也易于机器解析生成用户关心需要的数据格式[5]。通过url,该url中包含请求地址和页参数,以get方式发送http请求到服务器端,返回一个json串,解析该json串,封装返回数组。其中httpGetData( ) 方法实现从服务器端获取json串的功能。
4. 4 ListView按页递增显示
4. 4. 1 按页递增主要业务逻辑
创建类MerchantListActivity,继承基类Activity。在该类中实现按页递增显示的主要业务逻辑,而在onCreate( ) 方法中进行一些初始化操作,如加载界面初始布局,将页脚View与控件ListView绑定,给按钮注册按页递增加载监听事件, 加载初始第一页数据。并且,initParams( ) 方法是对属性pa- rams进行初始化,该params为一个key - value形式的键值对集合,其中含有totalPage,currentPage等与页码相关的属性值。
4. 4. 2 触发监听事件
注册按页递增加载事件监听,点击按页递增加载按钮, 就可以触发该监听事件,执行按页递增加载流程。
4. 4. 3 数据获取并发送
创建一个新的线程,进行数据请求,获取得到数据; 通过Handle - Message消息机制发送获取的数据。
4. 4. 4 Handle机制处理消息数据
Handle是Message的主要处理者,截获与自身相关联的Message消息,通过识别Message中Message. what的状态值[6],对不同的Message进行处理。
4. 5 ListView按页递增加载数据界面展示
图3 为手机端的商户信息按页展示图。在该界面中,点击底部的“查看更多”按钮,就会触发按页递增加载事件,加载下一页数据递增展示在控件ListView中,可以上下滑动滚动条查看以前的页数据。页码、总页数和每页包含的数据条数在url参数中指定。
5 ListView按页递增加载注意事项及优化方案
5. 1 注意事项
ListView在执行按页递增加载时,往往会由于一些小的疏忽导致加载失败。下面列出ListView按页递增加载中需要注意的一些细节:
( 1) 连接网络获取数据,加载图片等耗时操作,必须创建一个子线程,将一些耗时操作加载进子线程中执行[7],防止Android报ANR错误,发生界面假死,并出现“强制关闭”的错误提示。在子线程中获取数据,并将获取的数据返回主线程中,由主线程去执行更新UI的操作。
( 2) 对自定义的Adapter类,重写getCount( ) 方法时,返回的count大小必须是动态变化的。若返回的count为一固定大小时,当在自定义Adapter类中添加数据通知其自动更新时,ListView控件检测不到新增的数据,因而不会显示新添加的数据。
( 3) 在执行耗时操作时,尽量不用AsyncTask线程类。 AsyncTask内部的实现机制运用了线程执行池,由其产生的Thread对象的生命周期并不确定,这是应用程序无法控制的,容易出现内存泄露的问题。
5. 2 优化方案
在ListView按页递增加载过程中,需要加载大量的子view。加载多张较大的图片资源,经常会出现如下两个问题:
( 1) ListView滑动过程中图片显示重复错乱;
( 2) 图片OutOfMemory异常。针对以上两个问题,本文提供了优化方案。
5. 2. 1 ListView滑动过程中图片显示重复错乱
为了实现性能优化,ListView提供了缓存机制,ListView会缓存行item( 某行对应的View) ,即通过Adapter的getView函数获得每行的item。滑动过程中:
( 1) 如果行item已经滑出屏幕,且该item不在缓存内, 则送进缓存,否则更新缓存;
( 2) 在获取滑入屏幕的行item之前,通常首先判断缓存中是否有可用的item,如果有,作为convertView参数传递给Adapter的getView( ) 方法。分析ListView item缓存机制可知,出现错乱的原因是异步加载及对象复用造成的,如果每次ListView通过Adapter的getView( ) 方法能给对象一个标识,在异步加载完成时比较标识与当前行item的标识是否一致,一致则显示,否则不做处理即可。
5. 2. 2 图片OutOfMemory异常
在ListView加载多张较大图片资源时,经常会报java. lang. OutOfMemoryError( OOM) : bitmap size exceeds VM budg- et异常,这就表示图片的大小超过了dalvik为程序分配的heap的空间容量。Dalvik虚拟机会为应用程序分配固定大小的heap ,如果使用超过了该heap的空间设置,又没有可被回收对象,就会报OOM异常,而且多张较大图片会迅速占用空间造成OOM。由此可知,出现该异常的原因是图片资源过大,解决方法是可对图片资源进行处理,常使用BitmapFac- tory. Options方法对图片进行scale缩放处理。
6 结束语
数据显示控件 篇2
GridView是ASP.NET中功能强大的数据绑定控件 , 它可以让用户按照自己的需要控制数据的显示格式, 除了控件自身提供的排序、更新和删除数据缓存等功能外, 还可以通过手动编码的形式实现GridVeiw控件的高级数据绑定。
为了更好地推进顶岗实习工作, 实现对顶岗实习的有效管理, 根据经济管理学院的要求开发了一个顶岗实习管理系统,通过该系统实现对学生的顶岗实习的各项数据收集、统计和分析, 提高了学生顶岗实习管理的质量。下面通过该系统中的学生实习报告查阅页面, 深入解析使用GridView控件仿Excel格式呈现数据的方法与实现, 对ASP.NET的开发者具有一定的参考价值。
2 网页效果
制作的查阅学生实习报告的网页效果如图1所示, 网页浏览效果类似于Excel的冻结窗格功能, 即将报告列表的左边两列固定, 剩下的右边列内容通过滚动条移动查看, 点击翻页时, 数据序号自动按顺序递增编号, 每一次报告标题都合并了相关的数据单元格, 使得数据结构清晰, 查阅非常方便。
3 设计思路
要实现以上网页数据浏览的功能, 需求对GridView控件应用有比较深入的了解, 本实例的设计思路如下:
(1) 类似Excel的冻结窗格功能是通过两个GridView控件来实现的。
(2) 为了提高代码的重用性和易用性, 网页采用了编写代码的方式将数据库数据绑定到GridView控件。
(3) 为了增强GridView控件的分页功能和能更方便地通过样式美化分页按钮, 网页使用了第三方分页控件AspNetPager。该控件相对来说使用简单, 不需要编写复杂的分页代码, 而且功能齐全。
(4) 通过TableHeaderCell类实现合并单元格的编程技巧。
(5) 由于默认的GridView控件显示信息时无法给绑定的数据行自动编号, 所以给GridView控件添加一个模板列, 在该模板列插入一个Lable控件, 通过代码编程给Lable控件赋值实现数据行自动编号。
4 技术实现
4.1 页面
在xueshengbaogao.aspx网页文件中, 主要的网页设计对象是GridView控件和自定义分布控件。
首先添加两个GridView控件, 一个控件显示“序号和姓名”两列, 另一个控件显示剩余的列数据。将两个GridView控件分别放在两个
然后添加自定义分页控件。如果分页控件事先已添加到控件选项卡, 则从控件选项卡将分页控件图标拖放到GridView控件下面, 将网页切换到源代码视图, 把新添加的分页控件代码修改成如下代码, 再设置样式, 即可得到很美观的分页按钮效果。
4.2 分页数据绑定
在xueshengbaogao.aspx.cs代码文件中, 为了增强GridView控件的分页功能, 使用了AspNetPager自定义分页控件与之配合使用 , 因此在给GridView控件绑定 数据时需 要用到PagedDataSource类。PagedDataSource类封装了允许数据源控件执行分页操作的属性。在数据绑定过程中, DataSet数据源首先将数据赋给PagedDataSource, 然后再由PagedDataSource将数据赋给GridView控件, PagedDataSource对象充当一个数据中转站。数据绑定主要代码如下:
本页面数据读取主要是根据班级列表控件的值作为参数进行查询, 将查询语句先赋值给Session [" BaoGao_ChaXun"] 变量再赋给字符串变量ChaXun_str, 然后再在方法中传递变量,如DbHelperSql.GetDataSet (ChaXun_str), 其目的是避免翻页时, 查询语句参数值 (如班级列表控件的值) 发生变化而使得查询到的数据不正确。
另外, 使用AspNetPager自定义分页控件, 代码中还需要有AspNetPager1_PageChanged (object src, EventArgs e) 这个方法, 否则程序就会报错。
4.3 合并单元格
对于模仿Excel格式显示网页信息的其中一个主要表现就是对GridView控件的头部进行了合并单元格和单元格背景颜色设置, 这个功能是通过GridView_RowCreated() 事件编程实现的。从图2来看, 报告信息表头由2行组成, 其中第一行每一次报告的单元格是合并了3个小的单元格, 而且单元格之间的颜色交替变换。两个GridView控件创建头部的方法相似,这里以GridView2_RowCreated( ) 为例介绍学生报告信息表头的创建方法。
在GridView2_RowCreated( ) 事件中首先使用switch ( ) 函数的case语句判断如果是创建GridView控件的标题行, 则创建一个单元格集合tcHeader。即“TableCellCollection tcHeader= e.Row.Cells;”语句。 然后再用2个for循环语句生成头部单元格。
第1个for循环语句条件是从n=0开始到6结束, 共7个单元格, 存放7次报告的标题, 即本实例网页共显示学生提交的报告数是7次。if函数中的条件n%2==0是为了判定新增加的单元格的奇偶数, 以便给他们设置不同的背景颜色。当条件n=6时是第一行的最后一个单元格, 需要另外单独设置行结束标签, 即给该单元格设置有别于其他单元格的属性, 语句是tcHeader [n] .Text = " 总结报告", 因此嵌套一个if函数判断如果是第一行第6个单元格, 则设置该单元格Text属性为" 总结报告"。
另外由于单元格 集合tcHeader的第一个 单元格是 从tcHeader [0] 开始的, 但报告标题的序号是用“第1、2……次报告”表示的, 所以用一个变量m来表示报告序号, 其中m=n+1, 相关语句是tcHeader [n] .Text = " 第" + m + " 次报告"。
第2个for函数的语句是生成第二行的单元格, i从7开始是因为接着第一行的第6个单元格继续的。第二行共21个单元格, 每3个一组, 因此该for函数的条件设置为“i = 7; i<= 27; i=i+3”, 每3组的文本属性相同, 背景颜色设置为交替变换的颜色。GridView2_RowCreated () 事件代码如下:
4.4 自动递增编号
由于显示学生实习报告信息时, 需要对GridView表格增加一列自动递增的序列号, 以方便识别班级学生的序号。要实现这一 功能 , 首先在GridView 1第一列加 入一个TemplateField, 并在TemplateField的ItemTemplate中加入一个Label控件。然后在给GridView绑定数据的bind () 方法中 ,通过如下for语句给Label控件设置序号, 代码如下:
因为变量j的起始编号为0 , 而行的序号一般来说都习惯从1开始, 另外本实例的GridView控件的分页功能是和AspNetPager自定义分页控件一起配合使用的 , 所以为了避免翻页浏览数据后序号不正确, 将页码的计算公式设置为“pds.CurrentPageIndex * pds.PageSize + j + 1”, 其中pds是分页控件实例。
5 结语
GridView是一个用于显示数据的极为灵活的网格控件。介绍的GridView控件表头合并单元格和自动编号, 以及结合AspNetPager自定义分页控件实现更强的分页功能等技术非常实用。
摘要:通过一个实用的网页实例,深入探讨了ASP.NET的GridView控件模仿Excel格式显示数据的网页制作思路与实现过程,介绍了GridView控件在冻结窗格、合并单元格、自动编号和自定义分页控件等功能的编程技巧。
数据显示控件 篇3
1 系统安装
ASPMap有多个版本, 目前比较新的版本是ASPMap4.6。美国ERSI公司网站上有该软件免费试用版本下载, 下载后的文件是一个的安装包, 双击该软件, 按照其安装向导一步一步安装完毕就可以使用。
2 空间数据文件
空间数据是用于表示空间物体的位置、形状、大小和分布特征等方面信息的数据, 地图信息离不开空间数据的支持。空间数据格式很多, 采用SHAPE格式空间数据。SHAPE格式空间数据一组文件组成, 其中必要的基本文件包括坐标文件 (.shp) 、索引文件 (.shx) 和属性文件 (.dbf) 3个文件, 这3个文件的文件名必须相同。
主文件 (.shp) 是一个直接存取, 变长度记录的文件, 其中每个记录描述构成一个地理特征 (Feature) 的所有vertices坐标值, 包括点状目标 (Point) 、线状目标 (PolyLine) 和面状目标 (Polygon) 3种几何类型。
索引文件 (.shx) 主要包含坐标文件的索引信息, 文件中每个记录包含对应的坐标文件记录距离坐标文件的文件头的偏移量。通过索引文件可以很方便地在坐标文件中定位到指定目标的坐标信息。
属性文件 (.dbf) 用于记录属性信息。它是一个标准的DBF文件。dBASE表包含SHP文件中每一个Feature的特征属性, 表中几何记录和属性数据之间的一一对应关系是基于记录数目的ID。在dBASE文件中的属性记录必须和主文件中的记录顺序是相同的。图形数据和属性数据通过索引号建立一一对应的关系。
3 开发过程
3.1 新建网站
打开Microsoft Visual Stdio 2005系统, 选择Visual Basic语言, 新建一个名为MapGIS的ASP.NTE网站, 此时, 系统会创建一个名为MapGIS的文件夹, 该文件夹下还有一个名为App_Data的子文件夹和Default.aspx、Default.aspx.vb、web.config3个文件。
3.2 设置运行环境
(1) AspMap4.3的安装目录下有一个名为Bin的子文件夹, 将该文件夹及其下的AspMapNET.dll和AspMapUtil.dll两个文件拷贝到MapGIS文件夹下, 以备使用。
(2) 将地图所需要的数据文件拷贝到App_Data文件夹下。AspMap支持多个图层的现实, 现实的是某乡的林地地图信息, 含3个图层, 分别是:村界、等高线、林相图, 每个图层中分别含有上述3个基本文件, 其中林相图.dbf中ID字段存放小班编号、村界.dbf中Vi_name字段存放村名、等高线dbf中ALTITUDE字段存放海拔高度数据, 这些数据在进行地图显示的时候需要用到。
3.3 修改web.config文件
在解决问题方案中双击打开web.config文件, 在文件中
3.4 网页布局
在解决问题方案中双击打开Default.aspx文件, 去掉原来的源代码, 输入以下代码:
此时Web页面布置完毕, 可以切换到设计模式查看页面效果。
3.5 编写VB代码
在Default.aspx.vb文件中输入如下程序代码后就可以运行程序。代码中加了相应的说明, 可以帮助读者理解代码的含义。
4 运行效果
程序运行效果如图1所示, 选择某一个村后, 效果如图2所示。还可以对地图进行上下左右移动、中心显示和根据比例尺进行放大、缩小。
5 结结语语
数据显示控件 篇4
ActiveX控件是ActiveX组件中的一个子集,它可以是程序的自包含片段或独立的组件[1]。以前被称作OLE控件,是指标准的用户界面元素,它是微软推出的基于组件对象模型(COM)的技术,具有代码重用率高,移植性强的特点。由于ActiveX技术的开放性,开发者可以在其它程序中重用这些ActiveX控件。
目前,实现ActiveX控件开发的工具有多种,如VB,VC++,Dephi等,在这些开发工具中,VB以其实用、方便、快捷、开发周期短、广泛而强大的功能而得到广泛应用.特别将多个控件组合为一个新控件时,VB是最擅长的[2]。
1 时间显示控件的开发
1.1 控件的功能设计
通过分析,该控件应具有如下功能:
1)控件的背景色应能修改:由于用户所使用的PowerPoint模板有差别,时间显示控件要能满足用户的要求,实现控件背景色的改变,达到控件背景色与模板的背景色相一致;
2)能设置控件的时间显示方式:为了满足与用户使用的幻灯片上的字体相适应,控件上显示时间的字体、字号、颜色应能根据要求进行设置。
2.2 控件的界面设计
在设计界面时,既可以用VB所提供的绘图方法绘制控件的界面,也可以利用已有的ActiveX控件和VB内在的控件创建控件界面,由于时间显示控件仅需用数字方式显示当前时间,所以,利用VB的标签控件Label和时间控件Timer作为构成控件,实现时间显示控件的界面设计。控件的最终界面如图1所示。
该控件的构成控件Label和Timer的属性设置如表1所示。
2.3 控件的接口设计表1构成控件Label和Timer的属性设置
控件接口的设计是确定控件的属性、方法和事件,它是创建控件的核心部分。
根据前面对控件的功能描述,时间显示控件的属性有三个:一个是设置控件背景色的属性,另一个是设置控件前景色的属性,第三个是设置时间显示字体的属性。
控件的属性可以通过对usercontrol对象或其子控件的属性的委派来实现。为了创建时间显示控件的背景色的属性,可以通过显露构成控件lbtime的背景色的属性来实现。同样,可以通过对构成控件lbtime的字体属性、前景色属性的显露来创建时间显示控件的字体属性,前景色属性。部分代码如下:
时间显示控件除了包含读取和保存属性的两个事件UserControl_WriteProperties和UserControl_ReadProperties外,还添加两个事件UserControl_Initialize,UserControl_Resize,以及内部时钟控件Timer1的timer。UserControl_Initialize事件主要对控件的前景色、背景色,lbtime的caption属性进行初始化,UserControl_Resize事件主要实现对控件的UserControl对象的宽度和高度的改变,让其与包含的构成控件lbtime等高等宽。Timer事件每一分钟激发一次,确定子控件lbtime的显示内容及格式。
2.4 设置属性页
通过属性页可以方便地设置控件的属性,在属性设置上的属性声明类型为Font,OLE_COLOR,用属性页向导创建控件的属性页时,向导会自动将标准属性页添加到显示的页面列表中。
2.5 控件的测试及编译
控件编码完成后,添加测试窗体,实现对控件外观及功能的测试。为了能让在VB开发的时间显示控件在脱离VB的环境中使用,需将其进行编译,变成ActiveX控件,通过VB将此控件编译成ttmier.ocx文件,这样就可以在脱离开发环境中使用此控件了。
2.6 控件的注册
要使创建的控件为其他人员使用,须在目的计算机上对控件进行注册,注册的方式有如下几种:一是利用VB的“package and deployment wizard”创建一个安装程序,在目的计算机上启动安装程序即可;二是利用powerpoint进行注册。打开视图中的工具栏菜单,再点击控件工具箱中的其他控件,注册自定义控件;三是利用Regsvr32.exe进行注册。
3 时间显示控件在powerpoint中的应用
要在powerpoint中的每一张幻灯片中显示当前时间,只需将时间显示控件置于母版视图中即可,操作如下:点击视图中的母版、幻灯片母版菜单;再点击视图中工具栏、控件工具箱中的其它控件,找到时间显示控件;在幻灯片母版的适当位置,拖动鼠标,创建一个时间显示控件的实体。要改变控件的属性,只需用右键单击控件实体,点击其属性,即可打开属性页,在属性页中即可方便快捷的实现属性值的改变。
4 结论
利用所开发的时间显示控件,可以方便地应用于powerpoint中,有效地解决了放映状态下的时间显示问题。
参考文献
[1]季超,蒲海威,何欣.ActiveX控件及其开发[J].河南大学学报:自然科学版,1999(9).
数据显示控件 篇5
作者在开发一个考勤管理系统时,用户就提出需要对表格中的记录进行排序,能够记住用户上次对表格的列宽度、顺序的调整,能够显示记录序号。所以将这三个典型功能进行控件标准化,创建了一个新的基于DBGrid的控件,整合了上述功能,完全可以代替原有的DBGrid控件,使用起来相当方便。
1 方法
要在DBGrid中整合显示序号,点击列标题排序,保存列宽度等信息,最好的办法就是定义一个从DBGrid继承的新控件。点击Delphi的Component菜单下的New Component,在弹出的窗口中按图1进行设置,即可生成该新控件。
相对于DBGrid控件,本控件新增了标志排序状态的属性,用字符串ASCChar作为升序标志,用字符串DESCChar作为降序标志,用逻辑变量ShowRecNo作为显示序号的控制属性。新增方法SaveColumnsToIni,LoadColumnsFromIni分别用来保存和恢复上次列宽度,列顺序等信息。
Delphi提供了DBGrid的源代码,文件名为DBGrids.pas,该文件在Delphi6版本中存放在<安装目录>SourceVcl目录下,在Delphi2005版本中存放在<安装目录>3.0sourceWin32db目录下。打开Delphi的DB-Grids.pas文件,拷贝TDBGrid类的定义内容到图1生成的单元文件TSDBGrid.pas中,作为新控件类的定义。在TSDBGrid.pas文件的published部分增加属性property ASCChar:string;property DESCChar:string;property ShowRecNo:Boolean;在public部分增加方法procedure SaveColumnsToIni(sect,name:string);procedure LoadColumnsFromIni(sect,name:string);之后按CTRL+SHIFT+C键,Delphi就会补充完整的定义框架。
1.1 显示记录序号
原有的DBGrid控件的第一列仅显示记录状态标志,没有显示记录序号,本文所述新控件将扩展该标志列,添加显示序号功能。
DBGrid控件是从CustomDBGrid继承而来的,仅简单公开一些属性而已,所以新控件参照DBGrid,也从CustomDBGrid继承。原有的DBGrid控件的第一列宽度是在SetColumnAttributes这个过程中实现的,现在重载这个方法,加大该列宽度,为显示记录序号留出位置,代码如下。
1.2 排序功能
列排序功能通过点击列标题触发,在初始顺序、升序、降序状态间切换。重载TitleClick方法,在该方法中添加排序功能的代码,代码如下。
1.3 列信息的保存与恢复
这个功能用来保存与恢复用户在运行时对列进行顺序,宽度等信息的调整,代码如下。
2 控件注册
通过Delphi的Component菜单下的Install Component菜单进行控件注册,Delphi将利用生成控件时自动生成的Register过程(过程代码见本段后)注册本控件。将控件注册到控件面板上的TS Coms页中,然后就可以象使用Delphi的标准控件一样使用。具体注册窗体见图2。
3 控件的使用例子
通过上述过程注册控件后,新建一个工程文件Project1.dpr,在Form1中放入一个ADOConnection1控件,一个ADOTable1,一个DataSource1,一个本文所建立的控件TSDBGrid1(在面板的TS Coms页中),如图3。
设置ADOConnection1的LoginPrompt属性为False,连接串ConnectionString指向数据库:Provider=SQLOLEDB.1;Password=<你的数据库密码>;Persist Security Info=True;User ID=sa;Initial Catalog=<数据库名>;Data Source=.。设置ADOTable1的Connection属性为ADOConnection1,TableName属性值为<要显示的表名>,Active属性为True。设置DataSource1的DataSet属性为ADOTable1。设置TSDBGrid1的DataSource属性为DataSource1,ShowRecNo属性为True,并调整合适大小,得到图3的设计结果。
编写Form的OnCreate,OnDestroy事件代码,如下:
按F9运行,然后点击列标题,观察排序效果,调整表格列宽度,关闭程序,再次运行,列宽度即为上次调整后的宽度。本例子用ADOTable记录集作为数据集,显示了记录序号,学号,姓名,性别,出生年月。点击学号列标题进行升序操作,并在列标题上显示升序符号,效果如图4。
4 结论
该程序在WindowsXP,Delphi6,SQLServer2000下调试成功,经比较分析,Delphi6以及Delphi 2005的DBGrids.pas代码基本未变,所以本文所述内容在Delphi后续版本中也是适用的。
摘要:Delphi的DBGrid控件使用灵活,应用广泛,但没有提供显示记录的序号,点击列标题排序,对列宽度、顺序等信息的保存与恢复功能,在实际应用中存在不便。该文阐述了DBGrid控件的内部实现机制,介绍了对DBGrid控件添加显示序号,点击列标题排序,保存与恢复列宽度、顺序等信息的实现方法。
关键词:Delphi,DBGrid控件,记录,显示序号,排序
参考文献
[1]黄雄波,胡永健.基于Delphi的动态模糊输入系统的设计与实现[J].计算机应用与软件,2008(3).
[2]李文杰,李霄汉.在Delphi的DBGrid中添加可视组件的改进方法[J].电脑编程技巧与维护,2006(3).
[3]杜瑾.Delphi中DBGrid控件的高级使用[J].电脑学习,2003(1).
[4]敬喜,王昀.Delphi7数据库编程学习捷径[M].北京科海电子出版社,2003.
遥测数据列表滚动控件的设计与实现 篇6
随着经济的发展和科技的进步, 各国越来越重视空空导弹的研制[1], 空空导弹整体系统越来越复杂[2], 相应遥测传输的信息量也就越来越大, 需要实时监测的参数也就越来越多[3]。而不同的参数类型需要匹配不同的显示格式, 例如模拟量参数需要滚动显示, 各种总线参数需要以曲线的方式连续显示。
在数据滚动更新过程中, 随着遥测数据采集速率的增大[4], 帧间隔越来越小, 屏幕快速更新引起的闪烁也越来越严重。
本文针对需要连续滚动显示参数采取控件编写[5]的方法, 将常用功能封装在控件中[6], 提供给遥测数据采集软件调用;并通过内存拷贝, 利用双缓存机制, 解决了数据快速更新引起的闪烁, 较好的实现了采集信息列表化滚动的功能。
1 软件设计
1.1 功能设计
在数据驱动的列表滚动控件中, 首先应该能够满足数据滚动显示, 而滚动显示的过程实际是程序在屏幕上不停的重新绘图, 然后刷新显示出来。
采用传统的方法把绘图代码写进函数中, 通过函数的互相调用, 经过绘制、擦除、重绘三个阶段[7], 将图形显示在屏幕上, 当刷新比较快时, 将出现比较严重的闪烁问题, 而遥测数据的更新是以毫秒级为基础的, 所以软件的首要功能也是最基本的功能应能够解决当数据刷新频率较快时的屏幕闪烁问题。
此外控件还应该具有以下功能:
(1) 标题栏与滚动栏运行时互相独立;
(2) 可以动态改变行列的高度宽度;
(3) 当数据异常时, 报警显示;
(4) 运行过程中可以临时取消显示某一参数;
(5) 所有前景色、背景色均可设置;
(6) 预留接口以供程序调用。
1.2 软件结构
从加载列表滚动控件[8]到使用一个控件的流程如图1所示。分析图1 可以得出此控件需要以下几个模块:
(1) 读写配置文件信息模块;
(2) 设置背景色、字体大小、参数显示信息、报警值模块;
(3) 参数显示报警模块;
(4) 改变行宽列宽信息模块。
2 软件实现
2.1 滚动采取双缓存技术
双缓存技术是在内存中操作, 然后再把操作结果拷贝到屏幕内存中进行显示的技术。应用双缓存技术实时显示的滚动数据, 是数据更新后的结果, 而不是更新过程, 更新过程是在内存中开辟的一块区域中完成, 对屏幕操作只有一次过程, 更新的效率得到大幅提高。
传统方法与双缓存技术的比较[9]如图2 所示。
双缓存技术的使用过程如下[10]:
(1) 定义显示设备对象和位图对象:
(2) 建立与屏幕显示内容兼容的内存显示设备和位图, 并将位图选入到内存显示设备中:
(3) 先将背景色清除, 然后绘图:
(4) 调用Bit Blt在屏幕上显示设备对象中的更新结果;
(5) 绘图完毕后, 释放绘图对象:
2.2 运行过程中动态改变列宽、行宽
由于控件不能独立运行, 必须嵌入到某个容器程序中, 与该容器一起运行。当某个程序调用控件时, 控件的大小可以动态设置, 设置后就固定不变。
当需要改变列表控件的列宽时, 在鼠标获得列的焦点后, 只需要像List Ctrl控件拖动某列即可改变列的宽度。
而为了运行时界面的美观, 数据需要铺满整个控件, 这就需要在控件中均匀分布各行。当需要改变行宽时, 改变的是所有的行宽。所以本控件是在计算数据滚动区域高度后, 根据需要改变的行宽, 重新分布各行, 并且相应改变字体大小, 以适应新的行宽。
2.3 读写配置文件信息
当控件被应用程序首次加载时, 根据预留接口可以配置参数信息, 包括参数名、参数对应数据显示上下限、报警值、字体大小、背景色、文本色、行宽、列宽等信息。程序运行后, 根据显示需要, 可以动态更改行宽列宽信息, 以适应屏幕需要。
为了体现使用控件的便利, 这些初步配置信息和更改信息, 必须被保存, 以供应用程序下次加载控件时自动调用。
3 使用效果
把列表滚动控件集成到遥测数据采集软件中, 列表滚动控件运行良好, 占用内存空间少。实时运行过程中, 可以动态调整列宽行宽信息, 当数据超出报警值, 可以显示报警信息, 运行界面如图3 所示。
在100 ms至6 ms间隔的采集信息测试过程中, 数据滚动更新稳定, 没有出现闪烁现象。
4 结语
基于Active X技术的为数众多的软件组件都提供了满足某个规范的一系列编程接口, 应用程序可以通过该编程接口使用有软件组件提供的各种功能, 而无需知道这些功能在具体的软件组件里是如何实现的。双缓存技术能够有效的解决数据频繁刷新引起的屏幕闪烁问题。本软件就是基于这两种技术开发出来的, 供遥测数据采集软件调用, 测试表明, 该软件运行稳定, 能够满足实时遥测数据的采集分析。
摘要:实时数据滚动更新在遥测数据监测中占据着重要的地位。但随着遥测数据采集速率的增大, 帧间隔越来越小, 屏幕刷新引起的闪烁也越来越严重。在此提出通过控件技术实现数据列表滚动功能, 并通过内存拷贝, 利用双缓存机制, 解决数据快速更新引起的闪烁。通过测试证明, 该软件运行稳定, 操作方便, 解决了屏幕闪烁问题, 在遥测数据监测中发挥了重要作用。
常用数据表格控件的特点及使用技巧 篇7
1 各种数字表格控件的特点
1.1 “DBGrid”数据表格控件
“DBGrid”数据表格控件是初学者常用的控件之一, 控件全称是“Microsoft Data Bound Grid Control 5.0 (SP3) ”, 控件的使用需在“部件”内添加控件文件“DBGRID32.ocx ”。其使用的数据源是“Data”控件 (“Data”控件是VB的常用控件, 位于默认选项卡工具箱中) 。 “Data”控件是常用控件, 使用简单, 对于初学者易上手, 但它在使用中存在一定的局限性, 主要体现在: (1) 在实际的程序编写过程中, 可使用的数据库及连接方式非常丰富, 而“DBGrid”数据表格控件能够使用和连接的数据库却只有Access, 这种功能的局限性很大程度上限制了该控件的实际应用; (2) DBGrid功能相对较少, 对列、行仅提供一些简单操作, 对于复杂表格编程和大项目表格编程显得力不从心, 从而导致DBGrid控件只是在一些对数据表格功能要求简单的程序中出现, 比如用在本地小规模的Access数据库程序调用中。
1.2 “DataGrid”数据表格控件
“DataGrid”数据表格控件是编程人员常用的数据表格控件之一, 在程序编写的过程中被广泛使用。控件全称是“Microsoft DataGrid Control 6.0 (SP6) (OLEDB) ”, 其使用的数据源可以是“Adodc”控件, 也可以是数据环境“DataEnvironment”。“Adodc”是连接数据库的常用控件之一, 其支持的数据库较多, 基本包括了实际编程中常用的各种数据库, 如“Oracle”、“SQL Server”等等, 由于数据源功能比较强大, 数据表格的功能也相应增强, 因此其适用的范围比“DBGrid”控件要大得多, 在程序编写过程中被编程人员广泛使用, 但是, 经常使用“DataGrid”控件的编程人员也知道, 它最大的缺陷就是所能够提供的行和列的可操作性功能太弱。
1.3 “MSFlexGrid”数据表格控件
“MSFlexGrid”数据表格控件的控件全称是“Microsoft FlexGrid Control 6.0 (SP6) ”, 其不能使用“Adodc”控件作为数据源, 这一点就表明这个控件本身具有类似“Data”控件的局限性, 从它的名字也能看出, 它不属于“OLEDB”控件范畴。但是, “MSFlexGrid”数据表格控件对表格行和列的可操作性功能非常强大, 它可以通过控件本身对数据表格进行显示操作, 而不像前面两个控件必须通过修改数据源的数据属性来控制显示。同时“MSFlexGrid”数据表格控件在显示样式上也更丰富一些, 这样, 我们就可以获得显示数据合计行, 并进一步得到个别行集合的小计显示。
1.4 “MSHFlexGrid”数据表格控件
“MSHFlexGrid”数据表格控件的控件全称是“Microsoft Hierachical FlexGrid Control 6.0 (SP4) (OLEDB) ”, 控件可以使用“Adodc”控件或数据环境“DataEnvironment”作为数据源, 可以说它集合了“MSFlexGrid”数据表格控件和“DataGrid”数据表格控件的优点, 既可以支持各种数据库、ODBC, 又能方便的对行和列进行操作, 数据显示样式也非常丰富, “MSHFlexGrid”数据表格控件已成为程序编写中的主流控件。
各种控件基本功能情况对照见表1。
2 数据表格控件的操作使用技巧
我们用“MSHFlexGrid”数据表格控件来实现如何显示合计行、如何分段显示小计, 以此为例来论述数据表格控件使用中的一些技巧。
2.1 显示合计行
由于“MSHFlexGrid”数据表格控件可以在表格中增加行, 所以使增加合计行可以实现。方法是先计算出要合计的列的合计值, 再在“MSHFlexGrid”数据表格控件增加一行, 填入需要的合计及合计值数据, 实现合计行。在实现过程中, 要用到“MSHFlexGrid”数据表格控件的“Rows”、“TextMatrix”属性和“AddItem”方法。
Rows属性是返回当前表格的所有行数。
TextMatrix (x, y) 属性是返回或更改第x行第y列数据。
AddItem方法是增加一行。
以合计第j列为例, 基本算法如下:
Dim HJ As Long
HJ = 0
With MSHFlexGrid1
For i = 1 To .Rows - 1
If .TextMatrix (i, 2) <> "" Then HJ = HJ + .TextMatrix (i, 2)
Next
.AddItem ""
.TextMatrix (i, 1) = "合计"
.TextMatrix (i, 2) = HJ
End With
需要注意的是, 循环前必须将计算合计的变量“HJ”清零, 既保证在循环时不会带值进入循环, 同时要保证其是数字变量, 不然合计就会变成各子项的字符整合。当然在实际编程时要加上容错语句, 防止数据计算时出现异常。数据合计增加完成后, 不能再调用数据源的刷新和数据变化, 否则合计显示将被恢复, 如果在实际编程过程中需要数据源更新或刷新, 可将上述过程写入单独过程, 每次更新或刷新数据源时重新调用该过程。
2.2 分段显示小计
在实际使用当中, 我们有时还需要在每几组数据下面显示小计, 需要注意的是, “AddItem”方法只是在表格最下面增加一行, 由于小计不止一行, 这样做会使数据表格下面增加很多行, 需要进行行控制来实现此项功能。这里要用到“MSHFlexGrid”数据表格控件一个新的方法“Sort”, “Sort”方法的主要功能是排序, 即实现表格数据按某一列值大小来排序, 其使用格式是MSHFlexGrid.Sort=x, 其中x表示排序方式, 具体值的范围和功能见表2。
另外注意在排序前先使用MSHFlexGrid.Col=y指定组序号列, y值为列号。
要做到如图1所示的小计效果, 分如下几步来实现:
(1) 对组序号进行排序;
(2) 计算出每组数据的小计值;
(3) 在底部加入组个数的行, 分别在每行填记需要的字符、合计数值, 并在组号列填入组数“[组号数值].1” (此项内容很重要, 主要是为确保小计行在排序时能插入相应组数据结尾) ;
(4) 对组数值列进行排序。
实际过程中 (2) 、 (3) 项同时进行, 流程如图2所示。
3 结语
数据表格在编程中应用非常灵活, 使用什么样的数据表格, 要根据具体达到的效果而定。
摘要:根据笔者的编程实践经验, 就各种常用的数据表格控件的特点做了详细地比较分析, 并以实例说明了具体控件的使用技巧, 可供编程人员作为参考。
关键词:数据表格控件,特点,使用技巧
参考文献
[1]罗朝盛.VISUAL BASIC 6.0程序设计实用教程[M].北京:清华大学出版社, 2008.
[2]郭圣路.VISUAL BASIC 6.0中文版从入门到精通[M].北京:电子工业出版社, 2008.
[3]黄冬梅.VISUAL BASIC 6.0程序设计案例教程[M].北京:清华大学出版社, 2008.
相关文章:
结肠癌患者01-23
用户控件设计01-23
ActiveX控件01-23
MFC控件关联变量小结01-23
自定义控件基础知识01-23
数控编程说课稿01-23
2010四川省考面试经典真题解析系列01-23
数控编程技术的涵义01-23
数控编程软件01-23