以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多个字段都是根据原始几个字段计算得出的结果  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=12152)

--  作者:kgd815
--  发布时间:2011/8/24 14:58:00
--  多个字段都是根据原始几个字段计算得出的结果

当新增行时 在 DataRowAdding 事件中设置第一个字段默认值后就会产生 DataColChanged 事件,而不是等 初始化所有字段后才会产生

DataColChanged 事件:

Dim  MR As DataRow = e.DataRow
If CStr(e.newvalue) <> CStr(e.oldvalue) Then
    \'If MR("工艺单号") <> "" Then
    If MR("下机长缩率手输") Then
        MR("下机长缩率") = iif(MR("下机长缩率") = 0 ,0.97,MR("下机长缩率"))
    Else
        MR("下机长缩率") = format (getxjcsl( getszcs( MR("毛纱纱支")),zzv(MR("毛经组织")),MR("筘号"),MR("变换牙")) ,"0.000")
    End If
    If MR("下机宽缩率手输") Then
        MR("下机宽缩率") = iif(MR("下机宽缩率") = 0 ,0.94,MR("下机宽缩率"))
    Else
        MR("下机宽缩率") = format (getxjksl( getszcs( MR("毛纱纱支")),zzv(MR("毛经组织")),MR("筘号"),MR("变换牙")) ,"0.000")
    End If
    If MR("下水长缩率手输") Then
        MR("下水长缩率") = iif(MR("下水长缩率") = 0 ,0.97,MR("下水长缩率"))
    Else
        MR("下水长缩率") = format (getxscsl( getszcs( MR("毛纱纱支")),zzv(MR("毛经组织")),MR("筘号"),MR("变换牙"),MR("下机长缩率"), MR("下机宽缩率") , MR("色织"), MR("下水"),True),"0.000")
    End If
    If MR("下水宽缩率手输") Then
        MR("下水宽缩率") = iif(MR("下水宽缩率") = 0 ,0.90,MR("下水宽缩率"))
    Else
        MR("下水宽缩率") = format (getxsksl( getszcs( MR("毛纱纱支")),zzv(MR("毛经组织")),MR("筘号"),MR("变换牙"), MR("下水")) ,"0.000")
    End If
    If MR("缎裆停卷手输") Then
        MR("缎裆停卷") = iif(MR("缎裆停卷") = 0 ,1,MR("缎裆停卷"))
    Else
        MR("缎裆停卷") = IIF(MR("缎纬纱支") = "21S/2",2,0 )  +  IIF(MR("缎纬纱支") = "32S/2" ,3,0)
    End If
    If MR("开数手输") Then
        MR("开数") = iif(MR("开数") = 0 ,1,MR("开数"))
    Else
        MR("开数") = 1
    End If
    
    MR("成品中毛长") = MR("成品全长") - MR("成品平布长") * 2  - MR("成品缎裆长")
    
    MR("下水中毛长") = MR("成品中毛长")
    MR("下水缎裆长") = MR("成品缎裆长")
    MR("下水平布长") = MR("成品平布长") * iif(MR("成品平布长") >=1.5,2.9,3)
    MR("下水全长") = MR("下水中毛长") +  MR("下水平布长") * 2 +  MR("下水缎裆长")
    
    MR("下机中毛长") = format(MR("下水中毛长") / MR("下水长缩率"),"0.0")
    MR("下机缎裆长") = format(MR("下水缎裆长") / MR("下水长缩率"),"0.0")
    MR("下机平布长") = format(MR("下水平布长") / MR("下水长缩率"),"0.0")
    MR("下机全长") = MR("下机中毛长") +  MR("下机平布长") * 2 +  MR("下机缎裆长")
    
    MR("在机中毛长") = format(MR("下机中毛长") / MR("下机长缩率"),"0.0")
    MR("在机缎裆长") = format(MR("下机缎裆长") / MR("下机长缩率"),"0.0")
    MR("在机平布长") = format(MR("下机平布长") / MR("下机长缩率"),"0.0")
    MR("在机全长") = MR("在机中毛长") +  MR("在机平布长") * 2 +  MR("在机缎裆长")
    
    MR("在机中毛宽") = format(MR("中毛齿") / MR("筘号") * 5.08,"0.0")
    MR("在机平布外宽") = format(MR("平布外齿") / MR("筘号") * 5.08,"0.0")
    MR("在机全宽") = MR("在机中毛宽") + MR("在机平布外宽") * 2
    
    MR("下机中毛宽") = format(MR("在机中毛宽") * MR("下机宽缩率"),"0.0")
    MR("下机平布宽") = format((MR("在机平布外宽") - 0.3) * MR("下机宽缩率"),"0.0")
    MR("下机全宽") = MR("下机中毛宽") +  MR("下机平布宽") * 2
    
    MR("下水中毛宽") = format(MR("下机中毛宽") * MR("下水宽缩率"),"0.0")
    MR("下水平布宽") = format(MR("下机平布宽") * MR("下水宽缩率"),"0.0")
    MR("下水全宽") = Format(MR("下水中毛宽") +  MR("下水平布宽") * 2,"0.0")
    
    MR("成品中毛宽") = format(MR("成品全宽") - MR("成品平布宽") * 2,"0.0")
    
    MR("中毛碰数") = format(MR("变换牙") / 7.92 * MR("在机中毛长"),"0")
    MR("平布碰数") = format(MR("变换牙") / 7.92 * MR("在机平布长"),"0")
    MR("缎裆碰数") = Format(MR("变换牙") / 7.92 * MR("在机缎裆长") * (MR("缎裆停卷") + 1),"0")
    
    MR("制成率") = iif(MR("割绒"),0.8457,1) * iif(MR("下水"),0.94,1)
    MR("下机克数") = Format(MR("成品克数") / MR("制成率"), iif(MR("成品克数")>=100,"0","0.0"))
    
    MR("经纱实际纱支") = getsysteminfo( "生产实用纱支",MR("经纱纱支"),MR("经纱纱支"))
    MR("经纱预加工") = iif( MR("色织") = True ,"染色", "无")
    MR("经纱千米重") = format(getszqmz( MR("经纱实际纱支"),MR("经纱预加工")),"0.000")
    MR("经纱米数") = format(MR("在机全长") * (MR("中毛齿") * zzv( MR("底经组织") ) +  MR("平布外齿") * 4) / 100 ,"0.00")
    MR("经纱克数") = Format(MR("经纱米数") * MR("经纱千米重") / 1000 , "0.00")
    
    MR("纬纱实际纱支") = getsysteminfo( "生产实用纱支",MR("纬纱纱支"),MR("纬纱纱支"))
    MR("纬纱预加工") = iif( MR("色织") = True ,"染色", "无")
    MR("纬纱千米重") = format(getszqmz( MR("纬纱实际纱支"),MR("纬纱预加工")),"0.000")
    MR("纬纱米数") = Format(MR("在机全宽") *( MR("中毛碰数") + MR("平布碰数") * 2) * 3 / 100 ,"0.00")
    MR("纬纱克数") = Format(MR("纬纱米数") * MR("纬纱千米重") / 1000 , "0.00")
    
    MR("缎纬实际纱支") = getsysteminfo( "生产实用纱支",MR("缎纬纱支"),MR("缎纬纱支"))
    MR("缎纬预加工") = iif( MR("色织") = True ,"染色", "无")
    MR("缎纬千米重") = format(getszqmz( MR("缎纬实际纱支"),MR("缎纬预加工")),"0.000")
    MR("缎纬米数") = format(MR("在机全宽") * MR("缎裆碰数") * 3 / 100,"0.00")
    MR("缎纬克数") = Format(MR("缎纬米数") * MR("缎纬千米重") / 1000 , "0.00")
    
    MR("毛纱实际纱支") = getsysteminfo( "生产实用纱支",MR("毛纱纱支"),MR("毛纱纱支"))
    MR("毛纱预加工") = iif( MR("色织") = True ,"染色", iif( MR("毛纱纱支") = "16S" ,"上浆","无"))
    MR("毛纱千米重") = format(getszqmz( MR("毛纱实际纱支"),MR("毛纱预加工")),"0.000")
    MR("毛纱克数") = MR("下机克数") - MR("经纱克数") - MR("纬纱克数") - MR("缎纬克数")
    MR("毛纱米数") = Format(MR("毛纱克数") / MR("毛纱千米重") * 1000 , "0.00")
      
    \'End If
End If



DataRowAdding 事件:
Dim DT As Row = Tables("订单货品").current
Dim MR As DataRow = e.DataRow
MR("工艺单号") = ""
\'------------------------------------------------初始化订单信息,从订单录入基本数据
MR("订单编号") = DT("订单编号")
MR("货号") = DT("货号")
MR("风格") = DT("风格")
MR("规格") = DT("规格")
MR("名称") = DT("名称")
MR("色织") = DT("色织")
MR("缎裆") = DT("缎裆")
MR("割绒") = DT("割绒")
MR("螺旋") = DT("螺旋")
Select Case DT("漂染")
    Case "漂白","染色"
        MR("下水") = True
    Case Else
        MR("下水") = False
End Select
MR("毛纱纱支") = DT("纱支")
MR("成品全宽") = DT("宽度")
MR("成品全长") = DT("长度")
MR("成品克数") = DT("克数")
\'----------------------------------------------------初始化工艺设计参数
MR("机型") ="75梭机"
MR("织向") ="竖织"
MR("开数") = 1
MR("条间") = 4

MR("缎裆停卷手输") = False
MR("下机长缩率手输") = False
MR("下机宽缩率手输") = False
MR("下水长缩率手输") = False
MR("下水宽缩率手输") = False
MR("开数手输") = False

MR("毛经组织") = "单单"
MR("底经组织") ="单单"

MR("经纱纱支") = "21S/2"
MR("纬纱纱支") = "17S"
MR("缎纬纱支") = "21S/2"

MR("成品平布长") = 2
MR("成品缎裆长") = 0
MR("成品平布宽") = 0.7
MR("筘号") = 54

MR("标准牙") = 37
MR("变换牙") = 45
\'-----------------------------------------------------
Dim xjk As Single = format (getxjksl( getszcs( MR("毛纱纱支")),zzv(MR("毛经组织")),MR("筘号"),MR("变换牙")) ,"0.000")
Dim xsk As Single = format (getxsksl( getszcs( MR("毛纱纱支")),zzv(MR("毛经组织")),MR("筘号"),MR("变换牙"), MR("下水")) ,"0.000")
MR("中毛齿") =  ( MR("成品全宽") - MR("成品平布宽") * 2 ) / xsk / xjk * MR("筘号") / 5.08  
MR("平布外齿") = 32
\'-----------------------------------------------------
MR("工艺单号") = getsystembm("工艺设计","工艺单号")


如果要在DataColChanged设置代码,判断是否这些字段全部已经输入,输入了就执行代码,否则返回。代码如何设置

我先是判断 MR("工艺单号") <>""才会执行,可是一旦新增行程序就很出,如果不加这个条件还可以,但有些数据计算的不正确,请问有没更好的方法








--  作者:狐狸爸爸
--  发布时间:2011/8/24 15:08:00
--  

例如这个在DatarowAdding初始化四列数据,只有全部初始化完毕,才会有提示:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目29.table


--  作者:kgd815
--  发布时间:2011/8/24 15:12:00
--  
我打不开呀,我是用的开发版
--  作者:狐狸爸爸
--  发布时间:2011/8/24 15:14:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:aaa.rar