首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

表格录入数据后必须换行才会保存,怎么实现按下回车就保存呀

2012-03-28 
表格录入数据后必须换行才会保存,如何实现按下回车就保存呀?表格录入数据后必须换行才会保存,如何实现按下

表格录入数据后必须换行才会保存,如何实现按下回车就保存呀?
表格录入数据后必须换行才会保存,如何实现按下回车就保存呀?
--------------------------
我在单位开发的一个人事管理软件,表格录入设计成自动保存(即用户不用按下一个专门的保存按钮来执行保存操作,用户换行功者打回车就保存),但是现在操作者发现一个问题,就是表格中录入的数据,只有换行后才会保存.录入后打回车也无法保存,我不信,因为我一直认为打回车是可以保存的,我一试,确实如此,打回车后,我在后台数据库(sql server 2000)中一看,确实没有数据,我让用户上下换一行就行了,但是用户说,太麻烦了.他们说以前打回车就可以保存呀.
所以我想问问,如何实现打回车就可以保存呢?
只有换行才能保存,也有不好的地方,就是如果表格中只有一条记录呢?用户没法换行呀?



[解决办法]
应该是启用的行缓冲,只能在最后一个字段的 LostFocus 事件中手工写代码提交修改

[解决办法]
动态生成的表格会比较麻烦些,但也不是没有办法,你可以用 vfp9 的 bindevents 命令来绑定指定列中 Text1 对象的 valid / lostfocus 事件到一个自定义方法,在该方法中发 tableupdate(0, .t., 'grid绑定的表别名') 命令来提交修改数据

[解决办法]
也可以在 grid 的 AfterRowColChange 事件中发 TableUpdate 命令

[解决办法]
另一种方法
自定义一个 myTextBox 类,继承于 TextBox,可预先在各事件中编写好处理代码,动态生成 grid 列对象时替换原 Text1 对象,下面是说明此方法的简单示例:

CLEAR
CLOSE DATABASES
USE 你要编辑的表

LOCAL oForm as Form
oForm = NEWOBJECT( 'MyForm' )
oForm.Show()
READ EVENTS

DEFINE CLASS myForm as Form
ShowWindow = 1
AutoCenter = .T.
AllowOutput = .F.
PROCEDURE Init
LOCAL oCol as Column
This.NewObject( 'grd', 'Grid' )
This.grd.ColumnCount = 5 && grid 列在这里动态生成
FOR EACH oCol IN This.grd.Columns
oCol.RemoveObject('Text1') && 替换原 Text1 对象
oCol.NewObject('Text1', 'myText')
oCol.CurrentControl = 'Text1'
ENDFOR
This.grd.Visible = .T.
ENDPROC
PROCEDURE QueryUnload
CLEAR EVENTS
ENDPROC
ENDDEFINE

* 自定义的 TextBox 类,你在这里预先定义各事件要执行的代码
DEFINE CLASS myText as TextBox
PROCEDURE KeyPress
LPARAMETERS nCode, nShiftCtrl
? nCode, nShiftCtrl
* 你可以在这里判断到 nCode = 13 时发 TableUpdate 命令
* 也可以在下面两个事件中发 TableUpdate 命令,具体应用
* 地点由你的业务逻辑来决定
ENDPROC
PROCEDURE LostFocus
? This.Parent.Name + ' LostFocus.'
ENDPROC
PROCEDURE Valid
? ' Valid event raised.'
ENDPROC
ENDDEFINE

热点排行