joss的操作我做过的,不行的,因为是新增加一个列,而不是修改,因此如果在原来列的基础上新增,一旦checkbox被选中或者取消,就会变动原来列的值,而通过修改数据源,动态增加一列,又会导致column list not match错误。使用SyntaxFromSQL又会导致原来的数据窗口格式全部丢失,所以犯难了
真要动态创建数据窗口列,只有modify函数或干脆直接创建数据窗口了!
IF (ids_Data.RowCount() < 1) THEN Return -1
ids_Data.Sort()
ids_Data.SetFilter("(groupname <> groupname[-1]) OR GetRow() = 1")
ids_Data.Filter()
li_NumGroups = ids_Data.GetItemNumber(ids_Data.RowCount(), "f_groupcount")
// Destroy all previous groups
FOR li_GroupOn = 1 TO li_NumGroups
This.Modify("Destroy group_" + String(li_GroupOn))
NEXT
FOR li_GroupOn = 1 TO li_NumGroups
// Need to evaluate band and Y values
IF (li_GroupOn <= ii_GroupsOnTop) THEN
// Group is on top (header)
ls_ModStatement = 'create text(band=header y="' + String(((li_GroupOn - 1) * li_ButtonSpacing) + ((li_GroupOn - 1) * li_ButtonHeight) + 3) + '"'
ELSE
// Group is on bottom (footer)
ls_ModStatement = 'create text(band=footer y="' + String(((li_GroupOn - ii_GroupsOnTop - 1) * li_ButtonSpacing) + (((li_GroupOn - ii_GroupsOnTop) - 1) * li_ButtonHeight) + 5) + '"'
END IF
ls_Error = This.Modify(ls_ModStatement)
IF (ls_Error <> "") AND (ib_Debug) THEN
MessageBox("Create Group Error", ls_Error + "~n~n" + ls_ModStatement)
END IF
NEXT
这是一个实例中的一段代码,够复杂的吧!
所以还是建议楼主改变做法吧!
直接在VISIBLE属性中写脚本还是比较简单的!