DataGridView格式化代码自动生成方法

2019-10-08 07:45马玉春刘雍陈德祥
软件 2019年1期
关键词:控件代码宽度

马玉春 刘雍 陈德祥

摘  要: DataGridView控件可以很方便地以非绑定方式显示数据,也可以绑定到数据表用来显示和修改数据,并可以将数据直接复制粘贴到Excel表格中。根据DataGridView的属性和方法,设计了一种格式化代码的自动生成方法,一次性将DataGridView界面调整到位。

关键词: DataGridView;代码;自动

中图分类号: TP311. 56    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2019.01.003

【Abstract】: DataGridView can display the unbound data easily, and the bound data can be displayed with modification quickly, and both of them can be copied into Excel table. According to the attributes and methods of DataGridView, a method which used to adjust user interface only once of generating formatted code automatically is proposed.

【Key words】: DataGridView; Code; Automatically

0  引言

DataGridView控件界面友好,用来方便地显示绑定和非绑定数据,可以直接修改表格中的数据并保存到数据库[1]。但是,在调整用户界面的时候,需要经过多次反复。本文从DataGridView的特点和属性出发,先设计基本的界面风格,然后通过手动调整行高和各列的列宽,最后通过代码进行计算,输出各列的列宽、行高和DataGridView对象(假设对象名为dgv)的宽度和高度,将这些代码放入窗体的装载方法中或者用来设置其属性。文献[2]实现了一个通用的Access数据库类,本文利用此类填充dgv的数据集(通过属性DataSource),从而完成一个DataGridView模板。

1  外观属性

DataGridView的外观属性用来设置其可视化的外观,其中GridColor 属性用于设置网格线的颜色。CellBorderStyle属性用于设置普通单元格的边框样式,通过该属性可以确定只显示水平网格线(Single Horizontal)或垂直网格线(SingleVertical)。Column HeadersBorderStyle 属性用于设置列标题的边框样式,RowHeadersBorderStyle属性用于设置行标题的边框样式[3],这些属性一般使用默认值。

RowHeadersVisible 属性表示行标题是否可见,ColumnHeadersVisible 属性表示列标题是否可见,一般使用默认值True. ColumnHeadersHeight属性表示列标题所在行的高度,一般用像素表示。

AlternatingRowsDefaultCellStyle属性用于定义交替行样式。在设计器中选择DataGridView 控件,在“属性”窗口中,单击AlternatingRows DefaultCellStyle属性旁的省略号按钮,在“Cell Style 生成器”对话框中,通过设置属性定义样式,再使用“预览”窗格确认选择[4]。这样,用户所指定的样式将用于控件中显示的每一个交替行(从第二行开始)。若要定义其余各行的样式,只要使用 RowsDefaultCellStyle属性重复以上两个步骤即可。

在调整DataGridView窗体界面前,一般先设计好符合用户需求的外观属性。而外观属性Row Template是行模板属性,其中的 Height 子属性是整个数据行的行高属性,即默认情况下,Height 值是每一行的高度。RowTemplate属性值将在在程序运行时进行手动调整,然后通过调试命令在即时窗口中自动输出。

2  布局属性

常用且需要修改的布局属性主要包括Location 属性和Size属性,前者规定了DataGridView控件的左上角的位置,后者规定了控件的大小(宽度Width和高度Height)。确定Location比较简单,只要拖拽控件,放到一个合适的起始位置即可,这样即可确定Location了。但是,Size属性的确定通常需要考虑多种因素[5]。

填充数据后的DataGridView控件包括列標头所在的行和数据记录所在的行。列标头所在行的高度(ColumnHeadersHeight属性)与所要显示的数据行的高度(DataGridView控件的Rows集合的Height 值)累加,就是 DataGridView 控件的Size属性的 Height值(这里不考虑水平滚动条占据的行高)。如果Height值设置不合理,有可能在DataGridView 控件的底部出现半行记录,这样就显得不美观了。

DataGridView控件行标头所在的列,其宽度通过RowHeadersWidth属性来表示。DataGridView控件的宽度Width为RowHeadersWidth与各数据列宽度(DataGridView控件的Columns集合的Width值)之和,还要加上垂直滚动条的宽度,因为一般数据库的记录数较多,需要通过垂直滚动条来浏览记录[6]。

ScrollBars 属性指明滚动条的需求情况,默认为 Both,表示需要水平(Horizontal)和垂直(Vertical)滚动条,一般不更改此默认值。但是,只要DataGridView控件的宽度足够容纳所有列(行标头列和数据列)和垂直滚动条,水平滚动条就不可见;同理,只要DataGridView 控件的高度足够显示所有记录行,垂直滚动条就不可见。

布局属性值将在程序运行时进行手动调整,然后通过调试命令在即时窗口中自动输出。

3  行为属性

行为属性主要控制用户的行为,即是否允许或禁止某些操作,这些属性一般是布尔类型。AllowUserToAddRows获取或设置一个值,该值指示是否向用户显示添加行的选项,默认值为True;如果只是让用户查看,不允许用户修改,则设置为 False。AllowUserToDeleteRows获取或设置一个值,该值指示是否允许用户从DataGridView中删除行。AllowUserToOrderColumns获取或设置一个值,该值指示是否允许通过手动对列重新排序。

AllowUserToResizeColumns获取或设置一个值,该值指示用户是否可以调整列的大小;Allow UserToResizeRows获取或设置一个值,该值指示用户是否可以调整行的大小。在程序设计与调试期间,这两个值一般设置为True,用以调整大小,确定美观的具体数值。程序通过调试后,一般设置为 False,以免用户将程序界面弄乱[7]。

ColumnHeadersHeightSizeMode获取或设置一个值,该值指示是否可以调整列标题的高度,以及它是由用户调整还是根据标题的内容自动调整。AutoSize表示自动调整(默认值),EnableResizing 表示允许用户调整,DisableResizing表示禁止用户调整。一般情况下,采用默认值即可。如果需要精确控制界面的美观,可以在程序设计与调试阶段将该属性设置为EnableResizing,待确定好列标题的合适高度后,再将该属性设置为DisableResizing即可。

4  代码自动生成

为了方便实现代码自动生成,设置一个布尔变量debugEnable,在调试界面的阶段,将该值设置为True,允许上一节的行为属性,这样可以手动调整界面;在界面设计完成后,禁止行为属性,不能手动调整界面。将窗体尽量拉大,也使得dgv足够大,然后运行程序,与使用 Microsoft Office Excel 工具类似的方法去调整dgv的列宽与行高。调整完毕,如对界面满意,可点击有效记录的有效单元格。此时,产生一个CellClick事件,在该事件中输出代码和属性值[8]。

在dgv的CellClick事件处理程序中,变量dgvWidth是dgv的宽度,变量dgvHeight是dgv的高度,變量nDisplayRows是需要在dgv中显示的记录行数。第2节布局属性中已经说明了Data GridView控件的Width和Height的计算方法。DataGridView控件的BorderStyle属性默认为FixedSingle,在这种情况下,其宽度需要加2个像素进行调整;如果BorderStyle属性的值设置为Fixed3D,该值为4;如果BorderStyle属性的值设置为 None,DataGridView 控件的宽度也不需要调整了[9]。程序先输出行标头与列标头的高度与宽度。dgv.ColumnCount 返回 dgv 中的数据列数,在一个For循环中输出各数据列的宽度,并完成数据列宽度的累加。SystemInformation. VerticalScrollBarWidth为垂直滚动条的宽度。最后输出需要在设计时更改的属性(前面加上注释符号)。以文献[10]中的“基于TCP协议的计算机监控系统测试软件”为例,输出代码如下所示。

关闭应用程序,在设计时根据示例代码最后三行修改dgv的相应属性值,将其余代码复制到窗体装载方法中,禁用行为属性。由于dgv的大小已经确定,此时可以调整dgv的右侧和底端的边界。重新运行程序,界面如图1所示,dgv底部没有出现被切割的行,横向也无多余像素,整个界面完整美观,而且一次调整到位。

5  结束语

DataGridView控件使用方便,界面美观,深得编程人员和用户的喜爱。但是,其界面调整比较繁琐。本文通过对DataGridView的深入学习,提出了一种界面代码自动生成方法,提高了编程效率。修改界面数据后,如何更新后台数据,可以调用文献[10]中提供的方法。

参考文献

朱玉艳, 张慧. DataGridView控件数据导入/导出Excel表格[J]. 电脑知识与技术, 2017, 13(19): 4-5

马玉春. 基于 Visual Basic 2008的Access数据库类的设计[J]. 软件. 2012, 33(6): 41-43+47

赵睿. 针对Datagridview控件装载数据时发生的错误及其解决办法——以GNSS软件控制点编辑界面为例[J]. 电子技术与软件工程, 2018(08): 70-71.

黄宇健, 刘宏韬. Android项目开发范例大全[M]. 北京: 中国铁道出版社, 2012. 5

吕媛媛, 李可. 移动端应用设计中的响应式实现方法[J]. 软件, 2016, 37(02): 107-109.

岳立言, 欧阳昇, 翟宝蓉. 嵌入式Linux远程监控系统的设计与开发[J]. 软件, 2018, 39(06): 20-22.

陈佳, 李树强, 谷灵康. Android移动开发[M]. 北京: 人民邮电出版社, 2016. 5

姜海岚, 程琳. 双项目教学在软件专业课程中的实践——以《Android移动应用开发》课程为例[J]. 电脑知识与技术, 2018, 14(12): 114-115.

刘雍, 汪文彬, 马玉春. Android环境下的数据编码与处理技术[J]. 电脑编程技巧与维护, 2018(09): 71-74+107.

马玉春. 计算机监控系统的仿真开发[M]. 北京: 国防工业出版社, 2015. 2

猜你喜欢
控件代码宽度
创世代码
创世代码
创世代码
创世代码
红细胞分布宽度与血栓的关系
ASP.NET服务器端验证控件的使用
Spreadsheet控件在Delphi数据库系统中的编程与应用