第三课 用新的控件改进人事管理(二)
这一课讲用组合框选择输入部门和职务。之所以要用选择输入,是因为对于同一值不同人在不同时候输入是不一样的,比如“人事部门”,有人可能会输入成“人事部”,再加上无意识的输入错误,使得一个部门会有好几种说法,这将给查询、统计等带来很大问题,因此我们对于一个其内容只有有限个选择的字段的输入,最好采用选择输入。
从我们前面所讲过的控件中可以看出,复选框、选项按钮组、列表框、组合框都可以用作选择输入,那么时候该用哪一个控件呢?一般原则是:
1、对于具有“是”、“否”两种选择的,用复选框;
2、选项是固定的,并且选项不太多,可以用选项按钮组;
3、对于选项是可变的,并且选项不是非常多,可用列表框;
4、对于选项是可变的,并且选项非常多,可用组合框,因为选项非常多的情况下,用列表框找起来是很麻烦的,而组合框可以直接输入,只是在必要的时候才查一下。另外如果不希望该输入控件占太多地方,也可用组合框,因为它平时只占一行,拉下时才显示框,而列表框始终要占一块位置,当然您高兴也可以让列表框只占一行,但那样操作起来一定别扭。
要实现选择输入,就要将可选择的项目事先准备好,对于选项来说有两种情况,一种是固定的、一种是可变的。比如性别就是固定的,而部门就可能是不固定的,因为一个单位随时可以增减部门。
固定的选项可以在编程时编好,而不固定的一般就要有个数据表来存放选项,而且这个表可由使用的人任意增删和修改,下面我们就来讲讲怎样实现这种功能。
- 在人事档案数据库中建立一个数据表,就一个字段,字段名为“部门”;
- 在菜单中加一项“维护”,下面有一个子菜单项“部门字典”使用的命令是:
do form bmzd name bmzd
- 建立一个表单,界面如图1;

- 在“新增”按钮的click事件中写入如下程序:
if this.caption='新增' &&假如本按钮的标题为“新增”,表示第一次新增
this.caption='继续新增' &&将本按钮标题设为“继续新增”
endif &&结束假设
select bmzd &&选择部门表
append blank &&加一空记录
thisform.grid1.readonly=.f. &&将表格设为非只读,即可以修改
thisform.grid1.refresh &&表格刷新
thisform.grid1.setfocus &&将焦点放到表格上以利于输入 |
- 在“修改”按钮的click事件中写入如下程序:
if this.caption='修改' &&如果本控件的标题是“修改”
this.caption="结束修改" &&将本控件的标题设为“结束修改”
thisform.grid1.readonly=.f. &&将表格设为非只读,即可以修改
else &&否则 this.caption="修改" &&将本控件的标题设为“修改”
thisform.grid1.readonly=.t. &&将表格设为非只读,即可以修改
endif
thisform.grid1.refresh &&表格刷新
thisform.grid1.setfocus &&将焦点放在表格上 |
- 在“删除”按钮的click事件中写入如下程序:
select bmzd &&选择部门字典
*虽说目前肯定是bmzd表,不用选也可以,但这是为了防止以后程序做了某种改动,
*造成当前表不是bmzd而使程序出错,这样就万无一失了。
delete &&删除当前记录
thisform.grid1.refresh &&表格刷新
thisform.grid1.setfocus &&将焦点放在表格上 |
- 在“恢复”按钮的click事件中写入如下程序:
select bmzd &&选择部门字典
*虽说目前肯定是bmzd表,不用选也可以,但这是为了防止以后程序做了某种改动,
*造成当前表不是bmzd而使程序出错,这样就万无一失了。
recall &&恢复当前记录
thisform.grid1.refresh &&表格刷新
thisform.grid1.setfocus &&将焦点放在表格上 |
- 在“退出”按钮的click事件中写入如下程序:
select bmzd &&选择部门表
locate for delete() &&查找是否有做了删除标记的记录
if found() &&假如找到 pack &&将做删除标记的记录彻底删除
endif &&结束假设
thisform.release &&关闭本表单 |
- 在表格下的column1下的text1控件的lostfocus事件中写入如下程序:
*当处于新增状态时,即command1的标题为“继续新增”,
*一旦光标离开本格,表示新增结束,就将表格设为只读,
*同时将标题设回“新增”
if thisform.command1.caption='继续新增' thisform.grid1.readonly=.t.
thisform.command1.caption='新增'
endif |
- 存盘退出
这样用于输入和维护部门选项的子功能就做好了。
下面在编辑人员的表单中设置一组合框用于输入部门:
- 将原来用于输入部门的文本框删除;
- 换上一组合框,如图2;

- 将组合框的controlsource设为“rsda.部门”;
- 将rowsourcetype设为“6-字段”;
- 将rowsource设为“bmzd.部门”;
- 重新设置所有控件的tabindex,设置方法在第七课的第九条“设置控件的tabindex位置”中有讲解。
- 将菜单的初始化代码改为如下:
set talk off &&关闭命令响应
set safety off &&当覆盖磁盘上的文件时不提示,当程序编好后,不会错误覆盖文件
set date ansi &&设置日期为“年.月.日”方式
set century on &&设置年为4位数表示
set default to d:\soft\jfzcc\mcc\mcc2\rsgl2 &&设置软件所在目录,应根据您的目录做适当修改
use rsda &&打开人事档案数据表
select 0 &&选一空工作区(新增语句)
use bmzd &&打开部门表(新增语句)
dkda=.f. &&设置一变量用于检测档案是否打开,真为打开,假为关闭 |
至此用选择输入部门的功能就编好了,用同样方法,我们可以编出用选择输入职务的功能,这做为本课的练习,大家自己做一做。
目录 下一课 上一课 |