下拉数据窗口问题?

lichunuser 2002-03-15 10:58:11
我想在下拉数据窗口中实现象IE地址栏中输入部分字符,就有下拉框显示以已输入字符开头的网址,我在数据窗口控件的EDITCHANGED事件中加入代码dwo.dddw.showlist='yes',但一运行只要在数据窗口中键入字符,就非法操作
不知是何原因?
...全文
46 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dreamboat 2002-03-15
在PB中写代码简直是梦魇。
用PFC简单之极。

学学PFC吧,省得整天费尽脑子写一些无用的代码。
回复
lichunuser 2002-03-15
以上代码,一运行dw的下拉框就出来了,我想只当我在dw中输入数据的时候显示
下拉框
回复
531MT 2002-03-15
1、在下拉DW中指定该列"Allow editing"为true
2、在窗口中定义:
long il_rowcount
boolean ib_keyword
datawindowchild idwc_data
string is_mach,is_type
3、在窗口open
ib_keyword=false
4、全局函数long gf_match_row(ref datawindowchild dwc_name,string s_text,
int i_length,string s_type,string s_col_name)
内容:
string ls_mthtext
long ll_mthrow,ll_counter=1,ll_row
if s_type='number' then
do until ll_counter>dwc_name.rowcount()
ll_mthrow=dwc_name.getitemnumber(ll_counter,s_col_name)
if left(string(ll_mthrow),i_length)=s_text then
ll_row = ll_counter
exit
else
ll_counter=ll_counter+1
end if
loop
else
do until ll_counter>dwc_name.rowcount()
ls_mthtext=dwc_name.getitemstring(ll_counter,s_col_name)
if left(ls_mthtext,i_length)=s_text then
ll_row = ll_counter
exit
else
ll_counter=ll_counter+1
end if
loop
end if
return (ll_row)
5、在dw的clicked
ib_keyword=false
6、在dw的editchanged
string ls_search,ls_col_name,ls_att
int li_s_length
ib_keyword=false
ls_col_name=dw_1.getcolumnname()
if dw_1.getchild(ls_col_name,idwc_data)<0 then
return
end if
ls_att = ls_col_name+".dddw.displaycolumn"
ls_col_name=this.describe(ls_att)
ls_att = ls_col_name+".coltype"
is_type=idwc_data.describe(ls_att)
ls_search=dw_1.gettext()
li_s_length=len(ls_search)
if li_s_length=0 then
return
end if
il_rowcount=gf_match_row(idwc_data,ls_search,li_s_length,is_type,ls_col_name)
if il_rowcount<=0 then
ib_keyword=flse
else
ib_keyword=true
idwc_datqa.setrow(il_rowcount)
if is_type='number' then
is_mach=string(idwc_data.getitemnumber(il_rowcount,ls_col_name)
DW_1.SETITEM(dw_1.getrow(),DW_1.getcolumn(),is_mach)
else
is_mach=idwc_data.getitemstring(il_rowcount,ls_col_name)
DW_1.SETITEM(dw_1.getrow(),DW_1.getcolumn(),is_mach)
end if
end if


itemfocuschanged事件:
if string(dwo.edit.style)='dddw' then
dwo.dddw.showlist='yes'//显示下拉数据窗口
end if

editchanged事件:实现数据的过滤
datawindowchild ldwc_child
string ls_display_column
string ls_filter

if string(dwo.edit.style)='dddw' then
this.getchild(string(dwo.name),ldwc_child)
ls_display_column=dwo.dddw.DisplayColumn
ldwc_child.SetSort(ls_display_column+" A")
ldwc_child.Sort() //排序
ls_filter=ls_display_column+ ' like "'+data+'%"'
ldwc_child.setfilter(ls_filter)
ldwc_child.filter()//过滤
end if

itemchanged事件:
if string(dwo.edit.style)='dddw' then
dwo.dddw.showlist='no'//
end if


下拉窗口中什么数据都没有可能是下拉数据窗口未检索数据(我用的是8.0,下拉数据窗口会
自动检索数据),你可将itemfocusechanged事件的代码作如下修改,在itemfocusechanged事
件中检索数据。
datawindowchild ldwc_child
if string(dwo.edit.style)='dddw' then
dwo.dddw.showlist='yes'
this.getchild(string(dwo.name),ldwc_child)
if ldwc_child.rowcount()=0 then
ldwc_child.settransobject(sqlca)
ldwc_child.retrieve()
ldwc_child.setfilter('')
ldwc_child.filter()
end if
end if

editchanged事件修改如下,以过滤数字型的下拉显示数据:
datawindowchild ldwc_child
string ls_display_column
string ls_filter
string ls_coltype //显示列的数据类型

if string(dwo.edit.style)='dddw' then
this.getchild(string(dwo.name),ldwc_child)
ls_display_column=dwo.dddw.DisplayColumn
ls_coltype=ldwc_child.describe(ls_display_column+'.coltype')
ldwc_child.SetSort(ls_display_column+" A")
ldwc_child.Sort()
choose case left(ls_coltype,4)
case 'char'
ls_filter=ls_display_column+ ' like "'+data+'%"'
case 'long','deci'
ls_filter=string(ls_display_column)+ ' like "'+data+'%"'
case 'date'
ls_filter=string(ls_display_column,'yyyy-mm-dd')+ ' like "'+data+'%"'
case else
end choose
ldwc_child.setfilter(ls_filter)
ldwc_child.filter()
end if
回复
lichunuser 2002-03-15
为什么在editchanged中写dwo.dddw.showlist='yes'
运行就非法操作
回复
king_r 2002-03-15
dw_1.object.columnname.dddw.showlist = 'yes'
不过,通常应该在dw的设计窗口中指定showlist为true,然后在editchanged事件中对dddw中的内容进行过滤。
回复
fibbery 2002-03-15
查以前的帖子,有这个问题!
回复
lichunuser 2002-03-15
急急急
回复
发帖
非技术版
创建于2007-09-28

379

社区成员

PowerBuilder 非技术版
申请成为版主
帖子事件
创建了帖子
2002-03-15 10:58
社区公告
暂无公告