动态修改ddw的数据源,把一个栏位的数值作过滤参数传进去

JANEWS 2009-12-23 02:20:32
数据窗口中两个栏位,前面一个栏位输入数值作为后面一个栏位的DDW参数过滤显示出相应的资料来?不知道如何操作,请各位大虾帮帮忙
...全文
144 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yangshiqing 2009-12-28
  • 打赏
  • 举报
回复
我的是两个下拉数据窗口,A与B ,,B随着A的值变化而变化
在A 的Itemchanged中加入代码

//A有Cardbank一个字段,B有cardbank和pici两个字段,但只显示Pici一个字段,B根据A的Cardbank的内容变化,通过过滤条件,也相关的变化,A和B用Cardbank来关联
this.AcceptText()

String ls_filter,ls_bankname,ls_pici

ls_bankname = this.GetItemString(row,"cardbank")
If ls_bankname = '全部' Then
ls_filter = ''
Else
ls_filter = " (cardbank = '" + ls_bankname + "' or pici = '全部') "
End If


//对 B 下拉数据窗口进行过滤
Long ll_insert,ll_code
DataWindowChild ldwc_pici
ll_code = dw_pici.GetChild('pici',ldwc_pici)
IF ll_code = -1 THEN MessageBox("Error", "Not a DataWindowChild")
ldwc_pici.SetFilter(ls_filter)
ldwc_pici.Filter()

ldwc_pici.AcceptText()
永生天地 2009-12-24
  • 打赏
  • 举报
回复
最近的程序刚好就这样情况,我是这么写的
//
string ls_itemcode,ls_costname
string ls_dwcsql,ls_tempsql
datawindowchild ldwc
ls_itemcode = tab_1.tabpage_2.dw_2.object.图号[tab_1.tabpage_2.dw_2.getrow()]
this.getchild( dwo.name, ldwc)

choose case dwo.name
case "费用名称"
ldwc.settransobject(sqlca)
ls_dwcsql=ldwc.getsqlselect()
ls_tempsql=ls_dwcsql+" and 客户报价单产品.图号='"+ls_itemcode+"'"
ldwc.setsqlselect(ls_tempsql)
ldwc.retrieve()
ldwc.setsqlselect(ls_dwcsql)
case "费用值"
ls_costname = this.object.费用名称[row]
ldwc.settransobject(sqlca)
ls_dwcsql=ldwc.getsqlselect()
ls_tempsql=ls_dwcsql+" and 客户报价单产品.图号='"+ls_itemcode+"' and 费用名称='"+ls_costname+"'"
ldwc.setsqlselect(ls_tempsql)
ldwc.retrieve()
ldwc.setsqlselect(ls_dwcsql)
end choose
xiaobn_cn 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 janews 的回复:]
数据窗口中两个栏位,前面一个栏位输入数值作为后面一个栏位的DDW参数过滤显示出相应的资料来?不知道如何操作,请各位大虾帮帮忙
[/Quote]
在PB数据窗口中,下拉数据窗口的内容根据其它列的值变更是不可取的,这样会导致非当前行的下拉数据窗口显示错误.
sjlion 2009-12-23
  • 打赏
  • 举报
回复
自己改下吧,代码有些拖沓,而且不是非常通用。
fuxiaoyang13 2009-12-23
  • 打赏
  • 举报
回复
学习!
sjlion 2009-12-23
  • 打赏
  • 举报
回复
//====================================================================
// 事件: w_pms_room_change.wf_linkage()
//--------------------------------------------------------------------
// 描述:下拉数据窗口联动,以一下拉数据窗口的数据,过滤另一下拉数据窗口
//--------------------------------------------------------------------
// 参数:
// string s_column 源下拉数据窗口所在列
// string d_column 被过滤下拉数据窗口所在列
// datawindow adw_ini 下拉数据窗口所在数据窗口
// integer add_condition 1 为自己设定过滤列名和运算符,0 为以s_column的列名为过滤列名,运算符为=
// string as_condition 自己设定的过滤列名和运算符
//--------------------------------------------------------------------
// 返回: integer
//--------------------------------------------------------------------
// 作者: sj 日期: 2006年07月22日
//--------------------------------------------------------------------
// Copyright (c) 2002-2016 SJEMPIRE, All rights reserved.
//--------------------------------------------------------------------
// 修改历史:
//
//====================================================================

DataWindowChild d_child

integer rtncode,li_row
string ls_datatype,ls_data,ls_filter

adw_ini.accepttext()

rtncode = adw_ini.GetChild(d_column,d_child)

IF rtncode = -1 THEN MessageBox("Error", "Not a DataWindowChild")

ls_datatype = Left(adw_ini.Describe(s_column+".ColType"),5)
li_row = adw_ini.getrow()
choose case ls_datatype
case 'int'
ls_data = string(adw_ini.getitemnumber(li_row,s_column))
case 'char'
ls_data = adw_ini.getitemstring(li_row,s_column)
case 'date'
ls_data = string(adw_ini.getitemdate(li_row,s_column),'yyyy-mm-dd')
case 'long'
ls_data = string(adw_ini.getitemnumber(li_row,s_column))
case 'numb'
ls_data = string(adw_ini.getitemnumber(li_row,s_column))
case 'real'
ls_data = string(adw_ini.getitemnumber(li_row,s_column))
end choose


if add_condition = 1 then
ls_filter = as_condition + "'"+ls_data+"'"
else
ls_filter = s_column + "='"+ ls_data+"'"
end if

d_child.setfilter(ls_filter)
d_child.filter()

return 1
JANEWS 2009-12-23
  • 打赏
  • 举报
回复
两个栏位数据窗口用外部数据源做的,后一个栏位的DDW是用数据库的表做的
楼上的大虾,能不能说具体一点,怎么操作?谢谢
jlwei888 2009-12-23
  • 打赏
  • 举报
回复
取消ddw的自动检索功能


在itemchanged事件:

DataWindowChild dwc_orders
this.GetChild("后一列", dwc_orders)
dwc_orders.SetTransObject(SQLCA)
//上面定义实例变量,放在open事件中
if dwo.name = '前一列' then
dwc_orders.Retrieve(data)
end if
相关推荐
发帖
DataWindow

603

社区成员

PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
帖子事件
创建了帖子
2009-12-23 02:20
社区公告
暂无公告