Foxtable(狐表)用户栏目专家坐堂 → [求助]DataColChanged使用


  共有2592人关注过本帖树形打印复制链接

主题:[求助]DataColChanged使用

帅哥哟,离线,有人找我吗?
ynhyxin
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:82 积分:1090 威望:0 精华:0 注册:2012/7/20 15:22:00
[求助]DataColChanged使用  发帖心情 Post By:2021/3/9 10:03:00 [只看该作者]

 现在想使用“DataColChanged”来实现自动编号功能。
即:
图片点击可在新窗口打开查看
说明:1、ID列应为数据流水号,如果有删除数据,应自动补全流水号(重排流水号)
        2、资产编号不能编辑,编号规则是:类别编号+6位流水
        3、类别列是一个数据字典,取值编号,显示名称。
下面是代码:
Select e.DataCol.Name
    Case "类别"
        If e.DataRow.IsNull("类别") Then
            e.DataRow("资产编号") = Nothing
        Else
            Dim lb As String = e.DataRow("类别")
            If e.DataRow("资产编号").StartsWith(lb) = False '如果资产编号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(资产编号)","类别 = '" & lb & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该类别的最大编号
                If max > "" Then '如果存在最大编号
                    idx = CInt(max.Substring(2,8)) + 1 '获得最大编号的后八位顺序号,并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow("资产编号") = lb & Format(idx,"000000")
            End If
        End If
End Select


现在的问题:一种类别只能增加一条记录。即,XX000001
                增加同一种类别第二条记录时报错:
错误所在事件:表,低值耐久品,DataColChanged
详细错误信息:
调用的目标发生了异常。
索引和长度必须引用该字符串内的位置。
参数名: length
                                                  

请问:各位老师如何解决此问题?谢谢!       

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/9 10:07:00 [只看该作者]

idx = CInt(max.Substring(max.length - 6)) + 1 '获得最大编号的后八位顺序号,并加1

 回到顶部
帅哥哟,离线,有人找我吗?
ynhyxin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:82 积分:1090 威望:0 精华:0 注册:2012/7/20 15:22:00
  发帖心情 Post By:2021/3/9 10:14:00 [只看该作者]

 谢谢!
以上代码已经解决报错问题。但是要如何实现“ID列应为数据流水号,如果有删除数据,应自动补全流水号(重排流水号)” ?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/9 10:20:00 [只看该作者]

如果数据不多,这个功能到没什么,从删除行的前一行开始遍历所有行重新排序即可。

如果数据多,假设以后会有几十W的数据,然后极端情况下用户删除了第一行,后面所有的几十W行都要重新重排流水号,确定要做这种一个功能?其实不说几十W,就几万行数据,随便删除一下,估计程序都不用做其它东西了

 回到顶部
帅哥哟,离线,有人找我吗?
ynhyxin
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:82 积分:1090 威望:0 精华:0 注册:2012/7/20 15:22:00
  发帖心情 Post By:2021/3/9 10:34:00 [只看该作者]

 现在是需要寻求一种自动重排流水的决绝方法。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/9 10:38:00 [只看该作者]

只能遍历所有行,逐行处理,从删除行的前一行开始遍历所有行重新排序

 回到顶部