无法在网格中正确选择复选框

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 目前还不支持它。