-- 单据关联克隆问题
关联关系: 工艺卡 关联 工艺工序 关字字段 卡片编号 约束是同步更新同步删除 工艺工序 关联 工步 关联字段 卡片编号 ADN 工序
工艺卡 的卡片编号是自动自成的编号 写在表的datachanged中 号码唯一
写了一个克隆按钮 ,自动复制 主表及关联表,克隆是成功了
但是由于卡片编号是自动生成的编号,克隆成功后, 将原表的关联表的卡片编号也更改了,全变成新的编号,造成原工艺单关联单据信息全无,而新克隆出的单据关联表全是DOUBLE信息量.
我的需求是克隆出的单据号使用新编号包括联联表也是.
我写的代码如下.另窗口中卡片编号的控件名称为:texbox1
Tables("工艺卡").Current.Clone()
Dim drs As List(Of DataRow)
drs = Tables("工艺卡").Current.DataRow.GetChildRows("工艺工序")\'克隆工序\'
For Each dr As DataRow In drs
dr.Clone
Next
Dim drs1 As List(Of DataRow)
drs1 = Tables("工艺卡").Current.DataRow.GetChildRows("工步")\'克隆作业步骤
For Each dr1 As DataRow In drs1
dr1.Clone
Next
我试过另外一种代码思路是取tesbox1值 .克隆也可以成功,但是此种方法一量将表的datachanged事件(卡片单号自动生成),就无法克隆关联表,应该是卡片号是新号找不到记录.但是不加这个事件是可以的.
我将代码也复制下来,望高手指点
Tables("工艺卡").Current.Clone()
Dim drs As List(Of DataRow)
drs = Tables("工艺卡").Current.DataRow.GetChildRows("工艺工序")\'克隆工序\'
For Each dr As DataRow In drs
Dim cname As String = "卡片编号"
Dim kpbh As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim bh As String =kpbh.Value \'取得卡片编号新值?这样写是取的原来的值还是新值
Dim r As Row = Tables("工艺工序").current
Dim nr As Row = r.Table.AddNew
For Each c As Col In r.Table.cols
If c.name <> cname Then\'判断是否是卡片编号列
nr(c.name) = r(c.name)\'克隆记录
Else nr("卡片编号")=bh \'赋新值
End If
Next
Next
Dim drs1 As List(Of DataRow)
drs1 = Tables("工艺卡").Current.DataRow.GetChildRows("工步")\'克隆作业步骤
For Each dr1 As DataRow In drs1
dr1.Clone
Next
卡片编号代码:
If e.DataCol.Name = "制单日期" Then
If e.DataRow.IsNull("制单日期") Then
e.DataRow("卡片编号") = Nothing
Else
Dim bh As String = Format(e.DataRow("制单日期"),"yyyyMMdd") \'取得单据号的8位前缀
If e.DataRow("卡片编号").StartsWith(bh) = False \'如果单据号的前8位不符
Dim max As String
Dim idx As Integer
max = e.DataTable.Compute("Max(卡片编号)","制单日期 = #" & e.DataRow("制单日期") & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大单据号
If max > "" Then \'如果存在最大单据号
idx = CInt(max.Substring(12,3)) + 1 \'获得最大单据号的后三位顺序号,并加1
Else
idx = 1 \'否则顺序号等于1
End If
e.DataRow("卡片编号") ="RK-" & bh & "-" & Format(idx,"000")
End If
End If
End If