无法在网格中正确选择复选框
Unable to pick Checkbox properly in grid
对于网格第一列中的那些复选框布局,我有手动选择问题,这些复选框布局都是在 class 对象中创建的。
第一行可以pick成功,点击第二行就不会出现
整个列中的复选框似乎无法随机选取,并且无法为每一行选取相同的内容。
编码:
define class chk_sel as checkbox
name = "chk_sel"
procedure init
this.value = 0
this.caption = ""
this.readonly = .f.
this.tabstop = .f.
endproc
enddefine
Define class frmpurc As Form
procedure init
For frm in _screen.Forms
if frm.name == "MyForm"
select "" as pick,supcode,item_desc,inv_no,po_no,line,acc_qty, ;
taxcode,acc_amt,net_tax,gros_amt from purc ;
into cursor tmpcur ;
where alltrim(inv_no) = alltrim(this.txt_search.value)
If NOT USED('tmpcur_')
USE DBF("tmpcur") in 0 AGAIN alias tmpcur_
else
USE IN 'tmpcur_'
USE DBF("tmpcur") in 0 AGAIN alias tmpcur_
endif
sele tmpcur_
frm.grid_list.recordsource = SPACE(0)
frm.grid_list.recordsource = "tmpcur_"
frm.grid_list.deletemark = .f.
frm.grid_list.readonly = .f.
frm.grid_list.column1.width = 25
frm.grid_list.column1.bound = .f.
frm.grid_list.column1.controlsource = "tmpcur_.pick"
frm.grid_list.column1.readonly = .f.
frm.grid_list.column1.text1.visible = .t.
frm.grid_list.column1.removeobject("text1")
frm.grid_list.column1.addobject("pick","chk_sel")
frm.grid_list.column1.currentcontrol = "pick"
frm.grid_list.column1.pick.visible = .t.
frm.grid_list.column1.pick.readonly = .f.
frm.grid_list.column1.pick.tabstop = .t.
frm.grid_list.column1.sparse = .f.
endif
endfor
endpro
enddefine
谢谢任何能帮我解决这个问题的人。
对您进行一些调整...您的 for 循环应该是 FOR EACH,否则,我有一个编译错误。
For EACH frm in _screen.Forms
作为 editable 打开 table 的另一个快捷方式是 READWRITE 子句...您可以确保在使用快捷方式查询之前关闭游标语法
*/ 因为 SELECT( "someAlias" ) 将 return 它打开的工作区
*/ 如果不使用别名则为零,USE IN 声明关闭 table/alias
*/ 在给定的工作区。
use in select( "tmpcur" ) && pre-close your read-only cursor result
use in select( "tmpcur_" ) && pre-close your read-write version of cursor
*/ 现在,查询...首先,将 "PICK" 列更改为逻辑列
*/ 绑定到复选框控件的基础,而不是 space 字符...
*/ 然后更改 INTO 子句...
select ;
.f. as pick,;
AllOtherFields ;
from ;
purc ;
where ;
alltrim(inv_no) = alltrim(this.txt_search.value) ;
into ;
cursor tmpcur
*/ 现在,只需再次打开预关闭的结果
*/ 如果在查询前已经打开
USE DBF("tmpcur") in 0 AGAIN alias tmpcur_
现在,您所缺少的只是复选框控件的绑定。改变你的
frm.grid_list.column1.bound = .T.
通过设置为 TRUE,您表示您希望它绑定到每个单独的记录。
非常感谢您的帮助,我能够修复它。支票最终绑定到单个行。
我的最终代码只做了 2 处修改:
If NOT USED('tmpcur_')
USE DBF("tmpcur") in 0 AGAIN alias tmpcur_
else
USE IN select('tmpcur_') /*Change*/
USE DBF("tmpcur") in 0 AGAIN alias tmpcur_
endif
frm.grid_list.column1.bound = .t. /*It is bound to .f. in before */
对于最后提到的事情,我无法将 readwrite 子句放在光标后面,因为我使用的 Visual foxpro 6.0 目前还不支持它。
对于网格第一列中的那些复选框布局,我有手动选择问题,这些复选框布局都是在 class 对象中创建的。
第一行可以pick成功,点击第二行就不会出现
整个列中的复选框似乎无法随机选取,并且无法为每一行选取相同的内容。
编码:
define class chk_sel as checkbox
name = "chk_sel"
procedure init
this.value = 0
this.caption = ""
this.readonly = .f.
this.tabstop = .f.
endproc
enddefine
Define class frmpurc As Form
procedure init
For frm in _screen.Forms
if frm.name == "MyForm"
select "" as pick,supcode,item_desc,inv_no,po_no,line,acc_qty, ;
taxcode,acc_amt,net_tax,gros_amt from purc ;
into cursor tmpcur ;
where alltrim(inv_no) = alltrim(this.txt_search.value)
If NOT USED('tmpcur_')
USE DBF("tmpcur") in 0 AGAIN alias tmpcur_
else
USE IN 'tmpcur_'
USE DBF("tmpcur") in 0 AGAIN alias tmpcur_
endif
sele tmpcur_
frm.grid_list.recordsource = SPACE(0)
frm.grid_list.recordsource = "tmpcur_"
frm.grid_list.deletemark = .f.
frm.grid_list.readonly = .f.
frm.grid_list.column1.width = 25
frm.grid_list.column1.bound = .f.
frm.grid_list.column1.controlsource = "tmpcur_.pick"
frm.grid_list.column1.readonly = .f.
frm.grid_list.column1.text1.visible = .t.
frm.grid_list.column1.removeobject("text1")
frm.grid_list.column1.addobject("pick","chk_sel")
frm.grid_list.column1.currentcontrol = "pick"
frm.grid_list.column1.pick.visible = .t.
frm.grid_list.column1.pick.readonly = .f.
frm.grid_list.column1.pick.tabstop = .t.
frm.grid_list.column1.sparse = .f.
endif
endfor
endpro
enddefine
谢谢任何能帮我解决这个问题的人。
对您进行一些调整...您的 for 循环应该是 FOR EACH,否则,我有一个编译错误。
For EACH frm in _screen.Forms
作为 editable 打开 table 的另一个快捷方式是 READWRITE 子句...您可以确保在使用快捷方式查询之前关闭游标语法
*/ 因为 SELECT( "someAlias" ) 将 return 它打开的工作区 */ 如果不使用别名则为零,USE IN 声明关闭 table/alias */ 在给定的工作区。
use in select( "tmpcur" ) && pre-close your read-only cursor result
use in select( "tmpcur_" ) && pre-close your read-write version of cursor
*/ 现在,查询...首先,将 "PICK" 列更改为逻辑列 */ 绑定到复选框控件的基础,而不是 space 字符... */ 然后更改 INTO 子句...
select ;
.f. as pick,;
AllOtherFields ;
from ;
purc ;
where ;
alltrim(inv_no) = alltrim(this.txt_search.value) ;
into ;
cursor tmpcur
*/ 现在,只需再次打开预关闭的结果 */ 如果在查询前已经打开
USE DBF("tmpcur") in 0 AGAIN alias tmpcur_
现在,您所缺少的只是复选框控件的绑定。改变你的
frm.grid_list.column1.bound = .T.
通过设置为 TRUE,您表示您希望它绑定到每个单独的记录。
非常感谢您的帮助,我能够修复它。支票最终绑定到单个行。
我的最终代码只做了 2 处修改:
If NOT USED('tmpcur_')
USE DBF("tmpcur") in 0 AGAIN alias tmpcur_
else
USE IN select('tmpcur_') /*Change*/
USE DBF("tmpcur") in 0 AGAIN alias tmpcur_
endif
frm.grid_list.column1.bound = .t. /*It is bound to .f. in before */
对于最后提到的事情,我无法将 readwrite 子句放在光标后面,因为我使用的 Visual foxpro 6.0 目前还不支持它。