以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]AddNew()不会新增行? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=113187) |
-- 作者:kakawcj -- 发布时间:2018/1/10 18:35:00 -- [求助]AddNew()不会新增行? 先在DataRowAdding事件中定义了合同单号自动生成,然后在DataColChanged事件编写以下代码没有想要的效果:为何在当前表中新增行时,《报告管理_客服员》中没有新增行(见图1),而其它几个表《财务报表_会计》、《样品管理_物料员》、《检测记录_检测员》都能自动新增一行,但我再新增一行时,《报告管理_客服员》中即将上次新增的行也补充回来了(见图2) Select Case e.DataCol.Name Case "合同单号" Dim dr As DataRow = DataTables("财务报表_会计").Find("合同单号 = \'" & e.OldValue & "\'") \'定义dr为行,并在表"财务报表_会计"中找出"合同单号"为旧值的第一行 If dr Is Nothing Then \'如果没找到(即dr值为False) dr = DataTables("财务报表_会计").AddNew()\'在表"财务报表_会计"中增加一行 dr("合同单号") = e.DataRow("合同单号")\'该新增行"合同单号"列的值等于本表新增行"合同单号"列的数值 dr("业务员") = e.DataRow("业务员")\'该新增行"业务员"列的值等于本表新增行"业务员"列的数值 dr("合同金额") = e.DataRow("合同金额")\'该新增行"合同金额"列的值等于本表新增行"合同金额"列的数值 Else \'如果找到 dr("合同单号") = e.DataRow("合同单号")\'使该表的"合同单号"数值等于本表"合同单号"列的数值 End If dr = DataTables("报告管理_客服员").Find("合同单号 = \'" & e.OldValue & "\'") \'在表"报告管理_客服员"中找出"合同单号"为旧值的第一行 If dr Is Nothing Then \'如果没找到(即dr值为False) dr = DataTables("报告管理_客服员").AddNew() dr("合同单号") = e.DataRow("合同单号") dr("版式") = e.DataRow("版式") Dim max As String Dim idx As Integer max = DataTables("报告管理_客服员").Compute("Max(编号)","[_Identify] <> " & e.DataRow("_Identify")) \'取得最大编号 If max > "" Then \'如果存在最大编号 idx = CInt(max) + 1 \'获得最大编号后加1 Else idx = 200 \'否则顺序号(起始号)等于200 End If dr("报告编号") = e.DataRow("场所") & e.DataRow("领域") & Format(idx,"00000") dr("流水") = "--" MessageBox.Show("已为\'报告管理\'表新增一行合同单号为" & e.DataRow("合同单号") & "的数据,默认\'领域\'为A,\'式\'为1,版式为\'按合同\',如需变更请改变\'领域\'或\'式\'的值", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) Else dr("合同单号") = e.DataRow("合同单号") End If dr = DataTables("样品管理_物料员").Find("合同单号 = \'" & e.OldValue & "\'") \'在表"样品管理_物料员"中找出"合同单号"为旧值的第一行 If dr Is Nothing Then dr = DataTables("样品管理_物料员").AddNew() dr("合同单号") = e.DataRow("合同单号") dr("样品名称") = e.DataRow("样品名称") Else dr("合同单号") = e.DataRow("合同单号") End If dr = DataTables("检测记录_检测员").Find("合同单号 = \'" & e.OldValue & "\'") \'在表"检测记录_检测员"中找出"合同单号"为旧值的第一行 If dr Is Nothing Then dr = DataTables("检测记录_检测员").AddNew() dr("合同单号") = e.DataRow("合同单号") dr("样品名称") = e.DataRow("样品名称") Else dr("合同单号") = e.DataRow("合同单号") End If End Select
|
-- 作者:有点甜 -- 发布时间:2018/1/10 21:20:00 -- 首先,DataRowAdding 修改列,不会触发datacolchanged事件的。
其次,代码是没问题的,做个例子发上来测试。 |