当前位置: 代码迷 >> PB >> 怎么让数据窗口已经选择的相同ID的行不能再选中
  详细解决方案

怎么让数据窗口已经选择的相同ID的行不能再选中

热度:91   发布时间:2016-04-29 05:24:29.0
如何让数据窗口已经选择的相同ID的行不能再选中
本帖最后由 ehxz 于 2014-03-17 22:43:00 编辑
一个数据窗口有多行数据


选择框  序号 ID 内容
[  ]     1   001 23  
[  ]     2   002 25  
[  ]     3   003 26  
[  ]     4  001 25  
[  ]     5  002 23  

有类似以上的数据窗口,如果选择第一行,则第四行相同ID为001的就不能选中,反之选中第四行,第一行不能选中
这样的代码要如何实现,谢谢!

可能会有相关补充问题,能实现目的,弄明白了就给分
------解决思路----------------------
点击选择新行时取ID,然后在查找其他所有行是否被选中,如被选中则不可选。也可以再每次选中一行后,把该行ID对应的其他行选择框的Enable属性设置成false吧。
------解决思路----------------------
引用:
一个数据窗口有多行数据


选择框  序号 ID 内容
[  ]     1   001 23  
[  ]     2   002 25  
[  ]     3   003 26  
[  ]     4  001 25  
[  ]     5  002 23  

有类似以上的数据窗口,如果选择第一行,则第四行相同ID为001的就不能选中,反之选中第四行,第一行不能选中
这样的代码要如何实现,谢谢!

可能会有相关补充问题,能实现目的,弄明白了就给分


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)
------解决思路----------------------
引用:
隐藏标签,还需要解决如何取消选择的问题,一旦protect后,原来被选中的行也就无法编辑了


是的,取消选择以后,把标签的值也要改一下,把取消的从标签里去掉
------解决思路----------------------
引用:
用隐藏标签的方法挺有创意,可以节省大量的查找数据行工作,支持一下


这个是有创意,刚开始想到的是用find函数。
------解决思路----------------------
用隐藏的方法NICE!
  相关解决方案