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
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
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