以文本方式查看主题 - 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=161176) |
-- 作者:ynhyxin -- 发布时间:2021/3/9 10:03:00 -- [求助]DataColChanged使用 现在想使用“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 请问:各位老师如何解决此问题?谢谢!
|
-- 作者:有点蓝 -- 发布时间:2021/3/9 10:07:00 -- idx = CInt(max.Substring(max.length - 6)) + 1 \'获得最大编号的后八位顺序号,并加1 |
-- 作者:ynhyxin -- 发布时间:2021/3/9 10:14:00 -- 谢谢! 以上代码已经解决报错问题。但是要如何实现“ID列应为数据流水号,如果有删除数据,应自动补全流水号(重排流水号)” ?
|
-- 作者:有点蓝 -- 发布时间:2021/3/9 10:20:00 -- 如果数据不多,这个功能到没什么,从删除行的前一行开始遍历所有行重新排序即可。 如果数据多,假设以后会有几十W的数据,然后极端情况下用户删除了第一行,后面所有的几十W行都要重新重排流水号,确定要做这种一个功能?其实不说几十W,就几万行数据,随便删除一下,估计程序都不用做其它东西了
|
-- 作者:ynhyxin -- 发布时间:2021/3/9 10:34:00 -- 现在是需要寻求一种自动重排流水的决绝方法。 |
-- 作者:有点蓝 -- 发布时间:2021/3/9 10:38:00 -- 只能遍历所有行,逐行处理,从删除行的前一行开始遍历所有行重新排序 |