一个数据窗口有多行数据
如
选择框 序号 ID 内容
[ ] 1 001 23
[ ] 2 002 25
[ ] 3 003 26
[ ] 4 001 25
[ ] 5 002 23
有类似以上的数据窗口,如果选择第一行,则第四行相同ID为001的就不能选中,反之选中第四行,第一行不能选中
这样的代码要如何实现,谢谢!
可能会有相关补充问题,能实现目的,弄明白了就给分
------解决思路----------------------
点击选择新行时取ID,然后在查找其他所有行是否被选中,如被选中则不可选。也可以再每次选中一行后,把该行ID对应的其他行选择框的Enable属性设置成false吧。
------解决思路----------------------
1.在itemchanged里写代码,根据data值查找数据窗口,代码如下:
if dwo.name = "选择框" then
if data = '0' then //如果是取消选择,不处理
return
end if
string ls_data
ls_data = this.getitemstring(row, "id")
if this.find("id = '" + ls_data = "' and 选择框 = '1' and getrow() <>" + string(row), 1, this.rowcount()) > 0 then
this.post function setitem(row, "选择框", '0')
return 1
end if
end if
也可以考虑这种方法
2.在界面上放一个标签(t_text),隐藏,把选择的行的ID值都放到这个标签的文本里,用“,”分隔,然后设置选择框的protect为
if (pos(t_text, id + ',')> 0, 1, 0)
在itemchanged里写代码,如果选择了,就加入到那个t_text的文本里,如果取消选择,就从文本里去掉
------解决思路----------------------
find函数可以解决,同版主
------解决思路----------------------
用隐藏标签的方法挺有创意,可以节省大量的查找数据行工作,支持一下
------解决思路----------------------
楼上几位都是大牛·····赞
------解决思路----------------------
这个方法不错,平时都用版主的第一种方法,以后可以尝试一下这个了。
------解决思路----------------------
隐藏标签,还需要解决如何取消选择的问题,一旦protect后,原来被选中的行也就无法编辑了
------解决思路----------------------
if (pos(t_text, id + ',')> 0 and 选择框值 = 0, 1, 0)
------解决思路----------------------
是的,取消选择以后,把标签的值也要改一下,把取消的从标签里去掉
------解决思路----------------------
这个是有创意,刚开始想到的是用find函数。
------解决思路----------------------
用隐藏的方法NICE!