数据窗口动态增加列的问题,请看清楚再回答

yaiger 2003-05-19 02:59:05
需要在某个grid窗口上,动态地在第一列增加一个checkbox,可以选择
同时要求其它列的格式不变,有什么比较容易的方法?

如果测试可行,立刻给分
...全文
71 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaiger 2003-06-11
  • 打赏
  • 举报
回复
最终还是放弃了,简单一点算了
Thinkinger 2003-05-23
  • 打赏
  • 举报
回复
要注意select语句中的列顺序
Thinkinger 2003-05-23
  • 打赏
  • 举报
回复
你可以用dwo.setsqlselect()把那个要增加的列加到select语句中,然后结合joss(季节...夏至) 的方法就可以解决问题!
yaiger 2003-05-23
  • 打赏
  • 举报
回复
这两天有点忙,刚上来看到回复,sorry
to zhushuming(合欢)
如果没有在数据源里面动态增加一个列,是不能够用dw_1.Modify("create "+ copy出来的字符串),会报错,因为没有这个列

to bomber2001(天煞孤星)
这个我早就试过了,column list not match

to byfq(不愿放弃)
计算列不能获取焦点的,所以不行
yaiger 2003-05-20
  • 打赏
  • 举报
回复
我知道不是一个简单的问题,所以才出了100分
为什么这么做,其实很简单,就是不想重新画一个数据窗口,浪费系统的资源,只想在原来的数据窗口上增加一个checkbox,用来审核之类的操作

joss的操作我做过的,不行的,因为是新增加一个列,而不是修改,因此如果在原来列的基础上新增,一旦checkbox被选中或者取消,就会变动原来列的值,而通过修改数据源,动态增加一列,又会导致column list not match错误。使用SyntaxFromSQL又会导致原来的数据窗口格式全部丢失,所以犯难了
byfq 2003-05-20
  • 打赏
  • 举报
回复
使用computer column
bomber2001 2003-05-20
  • 打赏
  • 举报
回复
^_^,那你创建dw的时候,在compute,增加‘’,‘’,‘’,n个字段,对那些字段操作
zhushuming 2003-05-20
  • 打赏
  • 举报
回复
不难,先备份一下datawindow,然后在datawindow里加一个你要的对象,
导出这两个对象,用记事本查看导出的文件,
找到这两个datawindow的导出文件的不同之处,应该后一个datawindow比
前一个datawindow会多一行。
把这一行copy出来,把里面的 " 换成 '。
然后用dw_1.Modify("create "+ copy出来的字符串)
就可以在datawindow里建立了一个新的对象。
tchatcha 2003-05-19
  • 打赏
  • 举报
回复
up
show1097336 2003-05-19
  • 打赏
  • 举报
回复
我遇到了类似的问题,我是要在数据窗口中新增一个“备注”字段(该字段只是手工添加,不存在表中,只是用于将数据窗口的结果打印出来后,可能需要手工做的标注而已)和一个“保存期限”字段。
其中,“备注”字段只需要显示字段名称即可,列的内容为空(用于以后手工填写);
“保存期限”问题,作成checkbox的形式,可以选择打印出的内容(如:长期,短期);
应该如何实现???
急!!!在线等待!!!多谢。
joss 2003-05-19
  • 打赏
  • 举报
回复
楼主注意:该实例只是截取部分内容
要看实现动态增加列方法可参照
This.Modify(ls_ModStatement)的实现过程
特别的ls_ModStatement内容的生成过程~
joss 2003-05-19
  • 打赏
  • 举报
回复
为何要动态增加checkbox控件!
如要动态判断可在checkbox的visible中写脚本!

楼主说的问题本来就不是容易的事!

真要动态创建数据窗口列,只有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

// Common syntax to build group / static text
ls_ModStatement = ls_ModStatement + ' alignment="2" text="' + ids_Data.GetItemString(li_GroupOn, "GroupName") + '" ' + &
' border="6" color="0" x="3"' + &
' height="' + String(li_ButtonHeight) + '" width="' + String(This.Width - 27) + '" ' + &
' font.face="MS Sans Serif" font.height="-9" name=group_' + String(li_GroupOn) + &
' font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="2" ' + &
' background.color="79741120")'

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属性中写脚本还是比较简单的!

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧