hur.cn - 华软网

 热门搜索

请教高手了,关于子数据窗口的问题,不好解决,弄了半天了

  作者:未知    来源:网络    更新时间:2019/1/25
dw_1:

  mc(名称)     dj(单价)

在dw_1上的mc列上有一个子数据窗口child,child上有很多相同的值,这时由于统一种商品有很多不同的进价,我想获得child的行号,该怎么写?

原程序:在dw_1的itemchanged事件中
if dwo.name='mc'then
 integer code
 code=dw_1.getchild("mc",child)
   if code=-1 then
     messagebox("毛病","没法取得物品名称")
   else
     child.settransobject(sqlca)
li_count=child.retrieve()
         if li_count>0 then
i   =  child.find("mc = '"+data+"'",   1,   child.rowcount()) 
         messagebox("",string(i))
end if

      end if

end if
------华软网友回答------
没明白
------华软网友回复------
liugang78(woods) 
-----------
获得子数据窗口的行号
------华软网友回复------
如你所写运用find就好了
------华软网友回复------
liugang78(woods) 
---------------------------
find不行

由于data有很多重复的值
------华软网友回复------
有重复的,那你想要那一条的行号?(能够多加几个条件,不就一条数据了)
------华软网友回复------
如果data重复的话,是否是就得不到child行号了?
------华软网友回复------
能,不知道你想要那一条的行号!
------华软网友回复------
liugang78(woods) 
------------------------
所有一条的行号

该怎么样写?
------华软网友回复------
如果单击child的某一行,就获得它的行号,前提是data值都是重复的
------华软网友回复------
运用find,设置起头行号,顺序找
------华软网友回复------
下班了,如果不行,让他人帮你把
------华软网友回复------
i   =  child.find("mc = '"+data+"'",   1,   child.rowcount()) 
         messagebox("",string(i))
-----------------------------
这个找不出来,我都试了N遍了,如果data不重复能够,有重复值就不行了
------华软网友回复------
楼主是否是想取得商品名称child列表中的对应的商品编码,
如果是这样能够换一种思绪,child下拉数据窗口应该有一个显示列(名称)和一个数据列(编码),想措施取得数据列就能够了(方法在网上很容易搜索的到)
------华软网友回复------
PB_command事件中写代码,能够通过
if handle(idwc_)=hwndchild Then
    case 2048//Row改变
   ll_Row=idwc_.GetRow()
end if
------华软网友回复------
上次不是有人发过了吗?
帮你找下.
窗口中,包括人员编码和人员姓名
每一个人有两个编码,也就是说,有重名.

现在的问题是,我选择一个人名,前往的编码总是dddw里面靠上的同名人员编码!苦恼!

例,0001 张三
   0002 张三

我选择第二个,前往的编号应该是0002.但系统前往0001
//////////////////////////////////////////
楼上的方法也可取,只不过总觉得是取巧,还不是真正意义上的。
  冲着楼主的分数,我把解决方法写出来:

---1.自定义一个事件,事件ID选pbm_command:
   //下拉重复值措置惩罚
String ls_colname,ls_disp,ls_data,ls_datacol,ls_Dispcol,ls_tj,ls_filter
Long ll_row,ll_row1,ll_handle,ll_accept,ll_tj,ll_i,ll_col
Any la,la1
Boolean lb_tj=False
IF Lower(This.Describe("DataWindow.ReadOnly"))='yes' Then Return
IF notificationcode = 2049     THEN//下拉选中某行时触发的事件
ls_colname=This.GetColumnName()
IF Isnull(ls_colname) OR ls_colname='' Then Return
IF  lower(this.Describe(ls_colname + '.Edit.Style')) <> 'dddw' then return
IF This.GetChild(ls_colname,idw_dddw) = 1 Then
idw_dddw.SetTransObject(SQLCA)
ll_row = This.GetRow()
ll_row1 = idw_dddw.GetRow()
IF ll_row < 1 OR ll_row1 < 1 Then Return
ls_datacol=This.Describe(ls_colname+".dddw.DataColumn")
ls_Dispcol=This.Describe(ls_colname+".dddw.DisplayColumn")
Choose Case Lower(Left(idw_dddw.Describe(ls_datacol+".coltype"),4))
Case 'char'
la=idw_dddw.GetItemString(ll_row1,ls_datacol)
Case 'date','time'
la=idw_dddw.GetItemDateTime(ll_row1,ls_datacol)
Case 'deci','real'
la=idw_dddw.GetItemDecimal(ll_row1,ls_datacol)
Case 'int','long','numb'
la=idw_dddw.GetItemNumber(ll_row1,ls_datacol)
Case Else
Return
End Choose
Choose Case Lower(Left(idw_dddw.Describe(ls_Dispcol+".coltype"),4))
Case 'char'
la1=idw_dddw.GetItemString(ll_row1,ls_Dispcol)
Case 'date','time'
la1=idw_dddw.GetItemDateTime(ll_row1,ls_Dispcol)
Case 'deci','real'
la1=idw_dddw.GetItemDecimal(ll_row1,ls_Dispcol)
Case 'int','long','numb'
la1=idw_dddw.GetItemNumber(ll_row1,ls_Dispcol)
Case Else
Return
End Choose
This.Post Event ue_itemchanged(ll_row,ls_colname,la) //
 
ElseIF notificationcode = 512 Then//获得焦点
   此处省略,离题,不过照旧说说,由于很有用,当获得焦点时能够即时过滤下拉数据窗,做成通用事件,这样只需注册对应的条件列即可,比如福建省是条件列,那边就自动过滤为福建的各个市名
End IF

//ue_itemchanged(long row,string col_name,any data)
  IF Lower(This.Describe("DataWindow.ReadOnly"))='yes' Then Return
  IF This.GetColumnName() <> dwo_name Then  Return
  This.SetText(String(data))
  IF This.AcceptText() < 1 Then Return
  This.SetItem(row,dwo_name,data)

增补更正:上面的 ue_itemchanged事件里的参数应为 dwo_name,只是为了通俗才改成ls_colname,相信大家也看得出来
------华软网友回复------
没有明白楼上的东东.
在用户选择的时候好措置惩罚,由于有下拉dw的选择行号.
然则在选择后,在打开的时候,下拉里面自动选中的就是第一个张三了.
------华软网友回复------
你也能够,姓名,然后拉很长,加个编号,编号不给人看到就好了.这样选择就不会犯错了
------华软网友回复------
帮顶      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。