以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [讨论]表事件代码运行结果不正确  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=73481)

--  作者:huangfanzi
--  发布时间:2015/8/20 9:53:00
--  [讨论]表事件代码运行结果不正确
表事件:DataColChanged

图片点击可在新窗口打开查看此主题相关图片如下:示例.gif
图片点击可在新窗口打开查看
如上图所示,为什么一条一条记录录入能自动生成生产计划主号与分号,复制多条记录或重复填充就只能第一条记录运行正确,后面的就不对了。

\'自动录入生产计划主号与分号
If e.DataCol.Name = "编制时间"  Then
    If e.DataRow("编制时间") <> Nothing Then
        e.DataRow("月份")=Format(e.DataRow("编制时间"),"yyyy-MM")
        e.DataRow("日期")=Format(e.DataRow("编制时间"),"yyyy-MM-dd")
        Dim dr1 As DataRow
        dr1 = e.DataTable.SQLFind("[编制时间] = \'" & CurrentTable.Current("编制时间") & "\' And [_Identify] <> \'" & CurrentTable.Current("_Identify") & "\'" ,"生产计划分号 Desc",0)
        If dr1 IsNot Nothing Then \'如果找到的话
            If dr1("生产计划分号") >= 99 Then
                MessageBox.Show("此主号的分号值已经达到99,不能再增加新的分号,本次编制时间取消录入!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                e.DataRow("编制时间") = Nothing
            Else
                CurrentTable.Current("生产计划主号") = dr1("生产计划主号")
                CurrentTable.Current("生产计划分号") = dr1("生产计划分号") +1
            End If
        Else
            Dim dr2 As DataRow
            dr2 = e.DataTable.SQLFind("[编制时间] <> \'" & CurrentTable.Current("编制时间") & "\' And [日期] = \'" & CurrentTable.Current("日期") & "\'","生产计划主号 Desc",0)
            If dr2 IsNot Nothing Then \'如果找到的话
                If dr2("生产计划主号") >= 99 Then
                    MessageBox.Show("当日的主号值已经达到99,不能再增加新的主号,本次编制时间取消录入!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                    e.DataRow("编制时间") = Nothing
                Else
                    CurrentTable.Current("生产计划主号") = dr2("生产计划主号") + 1
                    CurrentTable.Current("生产计划分号") = 1
                End If
            Else
                CurrentTable.Current("生产计划主号") = 1
                CurrentTable.Current("生产计划分号") = 1
            End If
        End If
    Else
        e.DataRow("生产计划主号") = Nothing
        e.DataRow("生产计划分号") = Nothing
        e.DataRow("生产计划编号") = Nothing
        e.DataRow("月份") = Nothing
        e.DataRow("日期") = Nothing
    End If
End If

\'生产计划编号生成模块
If e.DataCol.Name = "编制时间" OrElse e.DataCol.Name = "生产计划主号" OrElse  e.DataCol.Name = "生产计划分号" Then
    If e.DataRow("编制时间") <> Nothing  AndAlso e.DataRow("生产计划主号") <> Nothing AndAlso e.DataRow("生产计划分号") <> Nothing Then
        Dim zh As String = CStr(e.DataRow("生产计划主号")) \'分号转字符型
        If zh.Length = 1  Then \'分号长度为1位时前面补字符0
            zh = "0" & zh
        End If
        Dim fh As String = CStr(e.DataRow("生产计划分号")) \'分号转字符型
        If fh.Length = 1  Then \'分号长度为1位时前面补字符0
            fh = "0" & fh
        End If
        e.DataRow("生产计划编号") = "SCJH" & Format(e.DataRow("编制时间"),"yyyy-MM-dd") & "-" & zh & "-" & fh
        
    End If
e.DataRow.Save
End If

--  作者:大红袍
--  发布时间:2015/8/20 10:14:00
--  

CurrentTable.Current

 

全部改成

 

e.DataRow