无法在网格中正确选择Checkbox

时间:2015-05-28 06:47:27

标签: visual-foxpro

我在网格的第一列中的那些复选框布局手动选择问题,其中全部都是在类对象中创建的。

我可以在第一行选择成功,但点击第二行时不会显示。

整列中的复选框似乎在随机挑选中失败,并且无法为每一行选择相同的内容。

编码:

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

谢谢任何人都可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

对你的调整很少...你的for循环应该是FOR FOR EACH,否则,我有一个编译错误。

For EACH frm in _screen.Forms

将表打开为可编辑的另一个快捷方式是READWRITE子句...您可以确保在使用快捷语法查询之前关闭游标

* /由于SELECT(“someAlias”)将返回打开的工作区域 * /或如果未使用别名则为零,USE IN表示关闭表/别名 * /在给定的工作区域内。

use in select( "tmpcur" )  && pre-close your read-only cursor result
use in select( "tmpcur_" )  && pre-close your read-write version of cursor

* /现在,查询...首先,将“PICK”列更改为LOGICAL * /绑定到复选框控件的基础,而不是空格字符...... * /然后改变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,表明您希望它绑定到每个单独的记录。

答案 1 :(得分:0)

非常感谢您的帮助,我能够解决它。检查最终绑定到单独的行。

我的最终代码中只进行了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。