以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]每次打开项目,表属性DataColChanged都需要确认下,才能执行,请教下问题出在哪?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=190471)

--  作者:wangtaolove
--  发布时间:2024/2/6 16:10:00
--  [求助]每次打开项目,表属性DataColChanged都需要确认下,才能执行,请教下问题出在哪?

做的自动编号,表属性DataColChanged的代码如下,每次打开项目,编码无反应,需要打开表属性再确认下,编码才能自动生成。请教下,什么问题?谢谢!

Select Case e.DataCol.Name

    Case "设备编号", "分类"

        \' 检查是否存在 "设备编号" 或 "分类" 列的值为null

        If e.DataRow.IsNull("设备编号") OrElse e.DataRow.IsNull("分类") Then

            \' 如果其中任何一个为null,将 "案卷级档号" 列的值设置为Nothing

           e.DataRow("案卷级档号") = Nothing

        Else

            \' 如果 "设备编号" 和 "分类" 列的值都不为null

            Dim d As String = e.DataRow("设备编号")

            Dim d1 As String = e.DataRow("分类")

            Dim bh As String = d1 & "-" & d & "-" \' 生成编号的前缀


            \' 检查 "案卷级档号" 列的值是否不以前缀开头

            If e.DataRow("案卷级档号").StartsWith(bh) = False Then

                Dim max As String

                Dim idx As Integer

                Dim flt As String

                

                \' 计算符合条件的最大编号,以分类和设备编号组成的前缀为条件

                flt = "分类 = \'" & d1 & "\' And 设备编号 = \'" & d & "\' And [_Identify] <> " & e.DataRow("_Identify")

                max = e.DataTable.Compute("Max(案卷级档号)", flt)


                \' 检查是否存在最大编号

                If max > "" Then

                    \' 如果存在最大编号,提取最后两位数字并加1,以获取下一个顺序号

                    idx = CInt(max.Substring(10, 2)) + 1

                Else

 
图片点击可在新窗口打开查看此主题相关图片如下:1707206576824.jpg
图片点击可在新窗口打开查看
                  \' 如果不存在最大编号,将顺序号设置为1

                    idx = 1

                End If


                \' 设置 "案卷级档号" 列的值为前缀和格式化后的顺序号

               e.DataRow("案卷级档号") = bh & Format(idx, "00")

            End If

        End If

End Select


--  作者:有点蓝
--  发布时间:2024/2/6 16:16:00
--  
是不是使用灾难恢复的方式,也就是按ctrl键打开项目的?按ctrl键打开项目所有事件都不执行的,按正常方式打开项目
--  作者:wangtaolove
--  发布时间:2024/2/7 10:29:00
--  
好的,谢谢,是这么回事。