主题:双击GRID的单元格即可在该行输入新数据
baotong88
[专家分:0] 发布于 2009-10-23 22:52:00
新手求助:我有一表单,两个TEXT控件用于输入客户和规格,一个GRID用于输入颜色,数量等字段,能否不用向导生成一对多表单输入,达到双击GRID的单元格即可在该行输入新数据,并可通过本表单上的修改按钮,保存按钮进行操作,谢各位了,请帮忙。
回复列表 (共9个回复)
沙发
绝缘子2009 [专家分:50] 发布于 2009-10-27 11:33:00
我也很想知道!帮你顶~
板凳
Gleam [专家分:3100] 发布于 2009-10-27 15:33:00
可以利用临时表来实现。
1、在表单的数据环境中添加你的多个数据表
2、在表单中添加grid控件
3、在表单中新建方法,如gridset。然后在该方法中加入select语句进行多表筛选获得数据的临时表,并设置gird控件与临时表的关系。
如:LPARAMETERS lpxdname, lpusename
LOCAL strwhere, strsql, aa
strwhere = ""
this.LockScreen = .T.
IF !EMPTY(ALLTRIM( lpxdname))
strwhere = "datainput.clocation == '" + ALLTRIM( lpxdname) + "'"
ELSE
strwhere = ".T."
ENDIF
IF !EMPTY( ALLTRIM( lpusename))
strwhere = strwhere + "and datainput.citemid == '" + ALLTRIM( lpusename) + "'"
ENDIF
strsql = "SELECT * FROM datainput where " + strwhere +" ORDER BY 1,2 INTO CURSOR grdnewused"
&strsql
&&我的表格控件名字为grdnewused
THIS.grdnewused.RECORDSOURCE=""
THIS.grdnewused.RECORDSOURCETYPE=1
THIS.grdnewused.RECORDSOURCE="grdnewused"
this.LockScreen = .T.
WITH THIS.grdnewused
.ALLOWCELLSELECTION=.F.
.COLUMNCOUNT=23
.LOCKCOLUMNS=5
.DELETEMARK=.F.
.RECORDMARK=.F.
.GRIDLINECOLOR=RGB(192,192,192)
.Column1.Header1.CAPTION="安装位置"
.Column1.WIDTH=100
.Column1.BACKCOLOR=RGB(249,249,244)
.Column2.Header1.CAPTION="监测时间"
.Column2.WIDTH=120
.Column2.BACKCOLOR=RGB(249,249,244)
.Column3.Header1.CAPTION="仪器型号"
.Column3.WIDTH=80
.Column3.BACKCOLOR=RGB(249,249,244)
.Column4.Header1.CAPTION="仪器编号"
.Column4.BACKCOLOR=RGB(249,249,244)
.Column4.WIDTH=80
.Column5.Header1.CAPTION="距离迎头(米)"
.Column5.BACKCOLOR=RGB(249,249,244)
.Column5.WIDTH=80
FOR i = 1 TO 18
aa = ".Column" + ALLTRIM( STR( i + 5)) + ".Header1.CAPTION= 'D" + ALLTRIM( STR( i)) + "'"
&aa
aa = ".Column" + ALLTRIM( STR( i + 5)) + ".WIDTH=50"
&aa
ENDFOR
.SETALL("alignment", 2)
.Column1.CONTROLSOURCE="grdNewused.clocation"
.Column2.CONTROLSOURCE="grdNewused.tdatetime"
.Column3.CONTROLSOURCE="grdNewused.copter"
.Column4.CONTROLSOURCE="grdNewused.citemid"
.Column5.CONTROLSOURCE="grdNewused.nyingtou"
FOR i = 1 TO 18
aa = ".Column" + ALLTRIM( STR( i + 5)) + ".CONTROLSOURCE='grdNewused.d" + ALLTRIM( STR( i)) + "'"
&aa
ENDFOR
ENDWITH
this.LockScreen = .F.
这是我的某个程序的表格控制代码,你可以参考一下
4、在你的保存按钮中分别进行各个表的数据保存
3 楼
baotong88 [专家分:0] 发布于 2009-10-27 20:24:00
先感谢Gleam老师的帮助,我试试,有问题再请教。TKS
4 楼
cbl518 [专家分:57140] 发布于 2009-10-28 03:00:00
1:设计表格 ReadOnly属性为: .T.
5 楼
cbl518 [专家分:57140] 发布于 2009-10-28 03:06:00
2:在表格 thisForm.Grid1.AfterRowColChange 事件中写入:
IF VAL(thisForm.Grid1.Tag)=nColIndex
thisForm.Grid1.ReadOnly= .T.
两个TEXT控件.ReadOnly= .T.
ELSE
thisForm.Grid1.Tag=TRANSFORM(nColIndex)
ENDIF
6 楼
cbl518 [专家分:57140] 发布于 2009-10-28 03:07:00
3:在表格 thisForm.Grid1.column1.text1.DblClick事件中写入:
thisForm.Grid1.ReadOnly= .F.
两个TEXT控件.ReadOnly= .F.
7 楼
cbl518 [专家分:57140] 发布于 2009-10-28 03:17:00
修改按钮
保存按钮
的代码分别利用表缓冲技术控制即可~
8 楼
baotong88 [专家分:0] 发布于 2009-10-28 09:42:00
谢谢Cbl518老师
9 楼
baotong88 [专家分:0] 发布于 2009-11-03 09:43:00
GRID的双击事件输入增加代码即可,还挺好用的。
我来回复