以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]编号不能自动生成,不知道错在哪里?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=83379)

--  作者:twef
--  发布时间:2016/4/7 17:02:00
--  [求助]编号不能自动生成,不知道错在哪里?

编号不能自动生成,不知道错在哪里?代码如下

Select e.DataCol.Name
    Case "项目编号","合同类型"
        If e.DataRow.IsNull("项目编号") OrElse e.DataRow.IsNull("合同类型") Then
            e.DataRow("合同编号") = Nothing
        Else
            Dim s As String = e.DataRow("合同编号")
            If e.DataRow("合同类型") = "劳务合同" Then
                s = "LW"
            ElseIf e.DataRow("合同类型") = "采购合同" Then
                s = "CG"
            ElseIf e.DataRow("合同类型") = "租赁合同" Then
                s = " ZL "
            ElseIf e.DataRow("合同类型") = "其他合同" Then
                s = " QT "
            ElseIf e.DataRow("合同类型") = "分包合同" Then
                s = " FB "
            Else
            End If
            Dim bh As String = e.DataRow("项目编号") & s  \'生成合同编号的前缀
            If e.DataRow("合同编号").StartsWith(bh) = False \'如果合同编号前缀不符
                Dim max As String
                Dim idx As Integer
                Dim flt As String
                flt = "项目编号 = \'"& e.DataRow("项目编号") & bh & "\' And [_Identify] <> " & e.DataRow("_Identify")
                max = e.DataTable.Compute("Max(合同编号)",flt) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(9,3)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("合同编号") = bh & Format(idx,"000")
            End If
        End If
End Select


--  作者:大红袍
--  发布时间:2016/4/7 17:05:00
--  
           Dim bh As String = e.DataRow("项目编号") & s  \'生成合同编号的前缀
            If e.DataRow("合同编号").StartsWith(bh) = False \'如果合同编号前缀不符
                Dim max As String
                Dim idx As Integer
                Dim flt As String
                flt = "合同编号 like \'" & bh & "%\' And [_Identify] <> " & e.DataRow("_Identify")
                max = e.DataTable.Compute("Max(合同编号)",flt) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(bh.length,3)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("合同编号") = bh & Format(idx,"000")
            End If
--  作者:twef
--  发布时间:2016/4/7 17:11:00
--  
谢谢大红袍老师!
--  作者:hqsoft
--  发布时间:2016/4/7 19:18:00
--  
强烈建议做成模块化