如何实现点treeview的终端节点而在一个datawindow控件中显示数据表中对应的一条记录?

skylla 2004-04-30 09:15:50
我用遍历的方法生成了一棵树,树的终端节点的label是用循环语句生成的,分别对应几张表中的主关键字(name),比如
树:
root
-111
-aaa
-bbb
-ccc
-222
-ddd
-eee
-fff

表111:
name sex birthdate
aaa m 1991
bbb f 1988
ccc f 1981

表222:
name id class
ddd 2 one
eee 5 two
fff 7 three

现在要实现的功能是,点aaa就在datawindow控件中以freeform的形式只显示
aaa m 1991 这一条记录,其他的以此推类。
这里要用到动态指定数据窗口技术,即几张表要用一个datawindow control显示。
请各位高手把详细代码写给我,我是个新手,只讲方法我估计听不懂。
...全文
43 19 点赞 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Libra_Chen 2004-08-20
??设置什么参数?
  • 打赏
  • 举报
回复
skylla 2004-05-06
算了,我买了一本书,上面有完整的例子,我现在知道了,在数据库以及数据窗口都要设置参数的,要不然就不刷新,多谢你这几天一直帮我,非常感谢!!!!!
  • 打赏
  • 举报
回复
艳阳天11 2004-05-05
MessageBox('test',dw_1.GetSQLSelect())
把这句执行一下,看看信息是什么?
  • 打赏
  • 举报
回复
艳阳天11 2004-05-05
那不行啊,我是PB8 + ASA7
  • 打赏
  • 举报
回复
skylla 2004-05-05
我没看见,那我马上发给你。我用的是Powerbuilder9+ASA8
  • 打赏
  • 举报
回复
艳阳天11 2004-05-05
我给你的消息没看到吗?把你的发过来给我吧,我不想建表又建数据窗口什么的。
ljy@taiking.cn
  • 打赏
  • 举报
回复
skylla 2004-05-04
LJYWZ,help me!!!!!!
  • 打赏
  • 举报
回复
艳阳天11 2004-05-03
在窗口的OPEN事件添加
dw_1.dataobject="table 1"
dw_1.settransobject(sqlca)
MessageBox('test',dw_1.GetSQLSelect())
看看你的数据窗口定义的SQL语句?
  • 打赏
  • 举报
回复
skylla 2004-05-03
你指的是不是在dw_1下要输入代码??我没有输,dw_1下是空的,请告诉我吧~~~~~
还有告诉我在tv_1的selectchanged()下到底输入哪段代码,谢谢!!!!!
  • 打赏
  • 举报
回复
skylla 2004-05-03
不行,dw_1.dataobject="table 1"
dw_1.settransobject(sqlca)
这两句我早加了,还是不管点哪个节点都只显示第一条记录,这样一句一句的请你回实在不好意思,估计是我太笨,不如这样吧,按我的代码,把你作好的工程文件发到我的信箱,数据库就用Adaptive Server Anywhere,按我的例子建,也发给我,这样其他的就我自己研究了,这是我的毕业设计,非常重要呀!!万分感谢!!!
skylla@tom.com
  • 打赏
  • 举报
回复
xc008 2004-05-02
同意楼上两位
selectchanged:

string ls_condition, ls_name
treeviewitem ltvi_new

getitem( newhandle, ltvi_new )
ls_name = ltvi_new.data
ls_condition = "name='" + ls_name + "'"
dw_1.setfilter( ls_condition )
dw_1.filter()
或者
加个参数
dw_1.settransobject()
dw_1.retrieve( ls_name )



  • 打赏
  • 举报
回复
艳阳天11 2004-05-02
如果表的数据量不多,可以用过滤的方法实现:
filter('name = "' + XXXX + '"') //XXXX为点击节点的name关键字
  • 打赏
  • 举报
回复
艳阳天11 2004-05-02
应该是参数问题,你的数据窗口定义参数了吗?
我运行都可以的。
  • 打赏
  • 举报
回复
skylla 2004-05-02
klbt(快乐白兔),兄弟呀,你这么讲我哪会呀????
  • 打赏
  • 举报
回复
skylla 2004-05-02
LJYWZ(人生不如意事十有八九),我试过了,没用,要不就是不显示,出错,要不就还是只显示第一条记录,不过每次显示都刷新的,一定还有问题,麻烦你用powerbuilder运行一下,只看代码估计发现不了问题,我要发疯了,Help!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • 打赏
  • 举报
回复
艳阳天11 2004-05-02
//以下是tv_1的selectchanged()下的代码
string ls_condition,ls_name
treeviewitem ltvi_new
getitem(newhandle,ltvi_new)
if tv_item.pictureindex=3 then
ls_name=ltvi_new.label
ls_condition="name='"+ls_name +"'"
dw_1.setfilter(ls_condition)
dw_1.filter()

//上面的代码是过滤,那又要以下代码来重新检索干吗呢?
dw_1.dataobject="table 1"
dw_1.settransobject(sqlca)
dw_1.retrieve(ls_name)
end if
改一下试试
string ls_condition,ls_name
treeviewitem ltvi_new
getitem(newhandle,ltvi_new)
if tv_item.pictureindex=3 then
ls_name=ltvi_new.label
dw_1.retrieve(ls_name)
end if
把以下两句移到窗口的OPEN事件
dw_1.dataobject="table 1"
dw_1.settransobject(sqlca)

  • 打赏
  • 举报
回复
skylla 2004-05-02
//我把我的代码放出来
//主窗口的open下,用以下代码建的树,这段建树的代码没问题
long newitem
int count1,count2,i,j
treeviewitem tv_item
datastore ds_1,ds_2
ds_1=create datastore
ds_2=create datastore
ds_1.dataobject="table 1"//和table 1表连接的datawindow,名字也叫table 1
ds_2.dataobject="table 2"//和table 2表连接的datawindow,名字也叫table 2
ds_1.settransobject(sqlca)
ds_2.settransobject(sqlca)
tv_item.label="root"
tv_item.pictureindex=1
tv_item.selectedpictureindex=2
tv_1.insertitemlast(0,tv_item)
tv_item.label="111"
tv_item.pictureindex=1
tv_item.selectedpictureindex=2
newitem=tv_1.insertitemlast(1,tv_item)
ds_1.retrieve()
count1=ds_1.rowcount()
for i=1 to count1
tv_item.label=ds_1.getitemstring(i,"name")
tv_item.pictureindex=3
tv_item.selectedpictureindex=3
tv_1.insertitemlast(newitem,tv_item)
next
tv_item.label="222"
tv_item.pictureindex=1
tv_item.selectedpictureindex=2
newitem=tv_1.insertitemlast(1,tv_item)
ds_2.retrieve()
count2=ds_2.rowcount()
for j=1 to count2
tv_item.label=ds_2.getitemstring(j,"name")
tv_item.pictureindex=3
tv_item.selectedpictureindex=3
tv_1.insertitemlast(newitem,tv_item)
next


//我先不谈动态指定datawindow,dw_1只和table 1连接
//以下是tv_1的click()下的代码
treeviewitem tv_item
string name
tv_1.getitem(handle,tv_item)
if tv_item.pictureindex=3 then
name=tv_item.label
dw_1.dataobject="table 1"
dw_1.settransobject(sqlca)
dw_1.retrieve(name)
end if
//但是不管点哪个终端节点都是只显示第一条记录,即aaa m 1991这一条
//我把代码改了一下,把click()下的删除,改写在selectchanged()下,但还是如此
//以下是tv_1的selectchanged()下的代码
string ls_condition,ls_name
treeviewitem ltvi_new
getitem(newhandle,ltvi_new)
if tv_item.pictureindex=3 then
ls_name=ltvi_new.label
ls_condition="name='"+ls_name +"'"
dw_1.setfilter(ls_condition)
dw_1.filter()
dw_1.dataobject="table 1"
dw_1.settransobject(sqlca)
dw_1.retrieve(ls_name)
end if

//各位告诉我问题出在哪呀????
  • 打赏
  • 举报
回复
skylla 2004-05-02
多谢三位,不过数据量还是较大的,而且有十几张表,这么一个一个过滤肯定不行的,各位再想想办法呀,我想这是个很常见的功能,各位高手不可能不会的~~~~~~~~~~~
  • 打赏
  • 举报
回复
klbt 2004-04-30
需要动态指定数据窗口控件对应的freeform数据窗口对象
可以建立参数,用name列检索
  • 打赏
  • 举报
回复
相关推荐
发帖
PowerBuilder
加入

922

社区成员

PowerBuilder 相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-04-30 09:15
社区公告
暂无公告