当前位置: 代码迷 >> PB >> 高分请问数据窗口中复选框处理有关问题
  详细解决方案

高分请问数据窗口中复选框处理有关问题

热度:44   发布时间:2016-04-29 09:58:12.0
高分请教数据窗口中复选框处理问题!
我的表中有一字段,用于存储爱好,爱好的内容存于数据字典中(动态),要怎么处理才能在数据窗口中可以进行复选多个爱好?查了一天资料了,没查到应该怎么做。不要告诉我要在表里面建多个字段,然后选择EDIT-》STYLE-》CHECKBOX。^_^

------解决方案--------------------
多个爱好在你的表中也应该是一个字段呀,用某种符号分割是吧。可行的做法是对dw中该爱好列 用个按钮 展开,类似于选日历一样,打开一个新的dw,该dw用checkbox,选择好后拼成你需要的字段即可。
即便是多跳记录,也可以用这个方法,最后生成几条记录就是了。
------解决方案--------------------
选择多行?行不行?
------解决方案--------------------
数据窗口中多行选中程序

  首先定义窗口实例变量:
  long Il_LastRow = 1 //最后一次点击的行。


  然后开始编写多行选中程序。程序算法描述如下:
  1、如果按下了Control键
   如果是在选中行上,取消该行
   否则,选中该行
   记录当前到窗口实例变量中
  2、如果按下了Shift键
   取消所有选中行
   选中上次点击行和当前行之间的所有数据行
   记录当前到窗口实例变量中
  3、如果没有按键
   如果点击行为选中行,不执行任何操作
   否则,取消所有选中行,选中当前行
   记录当前到窗口实例变量中


  比如,我们在窗口dw_1的Clicked事件中编写该脚本,程序如下:
  LONG Ll_CurrentRow , Ll_Circle

  IF row <= 0 THEN RETURN
  Ll_CurrentRow = row //当前激活的行

  IF keydown(keyshift!) THEN
   IF Il_LastRow = 0 THEN
    THIS.SelectRow(Ll_CurrentRow , True)//高亮当前行
    Il_LastRow = Ll_CurrentRow
   ELSE
    THIS.SelectRow(0 , False)
    IF Ll_CurrentRow > Il_LastRow THEN
     FOR Ll_Circle = Il_LastRow TO Ll_CurrentRow
       THIS.SelectRow(Ll_Circle , TRUE)
     NEXT
    ELSE
     FOR Ll_Circle = Il_LastRow TO ll_CurrentRow STEP -1
       THIS.SelectRow(Ll_Circle , TRUE)
     NEXT
    END IF
   END IF
  ELSE
   Il_LastRow = Ll_CurrentRow
   IF keydown(keycontrol!) THEN
    THIS.SelectRow(Ll_CurrentRow , Not THIS.IsSelected(Ll_CurrentRow))
   ELSE//单选情况
    IF THIS.IsSelected(Ll_CurrentRow) = TRUE THEN //如果本身选中
     Il_LastRow = Ll_CurrentRow
    ELSE//如果没有选中,则选中该行,其他行不选中
     THIS.SelectRow(0 , FALSE)
     THIS.SelectRow(Ll_CurrentRow , TRUE)
     Il_LastRow = Ll_CurrentRow
    END IF
   END IF
  END IF


  在DoubleClicked中,写如下代码取消所有已经选择的行:
  THIS.SelectRow(0 , FALSE)
  Il_LastRow = 0

  注意:在PB9中,选中Mouse Selection选项即可。


------解决方案--------------------
可以考虑
添加一个新表
外键关联 爱好字典 和 用户表
实现方便
------解决方案--------------------
符号分割or添加一个新表
是两个不同的方向,
添加一个新表综合的更加经济。
  相关解决方案