回 帖 发 新 帖 刷新版面

主题:双击GRID的单元格即可在该行输入新数据

新手求助:我有一表单,两个TEXT控件用于输入客户和规格,一个GRID用于输入颜色,数量等字段,能否不用向导生成一对多表单输入,达到双击GRID的单元格即可在该行输入新数据,并可通过本表单上的修改按钮,保存按钮进行操作,谢各位了,请帮忙。

回复列表 (共9个回复)

沙发

我也很想知道!帮你顶~

板凳

可以利用临时表来实现。
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 楼


   先感谢Gleam老师的帮助,我试试,有问题再请教。TKS

4 楼

1:设计表格 ReadOnly属性为: .T.

5 楼

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 楼

3:在表格 thisForm.Grid1.column1.text1.DblClick事件中写入:
thisForm.Grid1.ReadOnly= .F.
两个TEXT控件.ReadOnly= .F.

7 楼

修改按钮
保存按钮
的代码分别利用表缓冲技术控制即可~

8 楼


  谢谢Cbl518老师

9 楼

GRID的双击事件输入增加代码即可,还挺好用的。

我来回复

您尚未登录,请登录后再回复。点此登录或注册