七.改进VFP的searchclass.vcx
我们都知道利用VFP提供的WIZARDS类库中的searchform.vcx和searchclass.vcx可 以创建一个通用查询表单。这个查询非常通用,操作界面也非常简单明了。但是,此表单有一个缺憾,就是此表单的字段对话框就只能显示字段名,如果数据表的字段名为英文时,显示的字段名对操作人员而言就显的不够清楚。我们一般在设计数据库时给每个字段加以中文标题,用于对字段名的详细说明,就像用BROW命令时,就可以用字段标题代替字段名一样, 我们也可以通过对searchclass.vcx的修改使其用字段标题代替字段名显示,这样就使得整个界面非常友好。
---- 打开WIZARDS类库,选择searchclass.vcx。
---- (一)、修改cbofield1的init事件
---- 在下列语句 FOR m.i = FCOUNT() TO 1 STEP -1
IF INLIST(aWizFList[m.i,2],"G","M","U") &&Memo field
=ADEL(aWizFList,m.i)
DIMENSION aWizFList[MAX(1,ALEN
(aWizFList,1)-1),NUM_AFIELDS]
ENDIF
ENDFOR
后加上以下程序段:
*获取当前的数据表名
tname=alias()
*获取数据库名
dname=cursorgetprop('database')
set database to (dname)
*获取字段标题
for m.i=1 to alen(awizflist,1)
fname=tname+′.′+awizflist[m.i,1]
*将字段名保存
awizflist[m.i,16]=awizflist[m.i,1]
if !empty(dname)
fcaption=dbgetprop(fname,′field′,′caption′)
*用字段标题代替字段名
awizflist[m.i,1]=iif(!empty
(fcaption),fcaption,awizflist[m.i,1])
endif
endfor
THIS.RowSourceType = 5
THIS.RowSource = "aWizFList"
THIS.VALUE = THIS.LIST[1,1]
将原最后一句THIS.VALUE=THIS.LIST[1]删除
---- (二)、修改cbofield2的init 事件 THIS.RowSourceType = 5
THIS.RowSource = "aWizFList"
THIS.VALUE = THIS.LIST[1,1]
---- (三)、修改searchitem方法程序
---- 在语句m.cFldName = ALLTRIM(m.oField.Value)后加上以下程序段: *查找对应显示标题的字段名
for m.i=1 to alen(aWizflist,1)
if m.cfldname=alltrim(aWizflist[m.i,1])
*用字段名代替字段标题
m.cfldname=alltrim(aWizflist[m.i,16])
endif
endfor
---- 这样通过对以上二个字段组合框的init事件和searchclass方法程序的修改就可以完成在字段组合框显示字段标题,而非字段名,只要我们在数据表中设置好每个字段的标题, 就可以在字段组合框中显示运用。其实WIZARDS类库中类都可根据我们的实际需要进行改进,在程序中直接引用,这样就减少了我们重新设计类的麻烦。
|