以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 序号自动增加问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=173120) |
-- 作者:15666282205 -- 发布时间:2021/11/16 9:04:00 -- 序号自动增加问题 老师,我在表的datarowadded事件中写了以下代码,实现了序号自动增加。还想优化实现如下功能:表是由多人录入的,如果是A录入,则序号为A001、A002...如果是B录入的,序号为B001、B002...等,以此类推。如何实现? \'------------------------------自动增加序号--------------------- e.DataRow("序号") = e.DataTable.sqlCompute("Max(序号)") + 1 e.DataRow.save 我的思路是:保留序号列,另加一列“序号2”,序号2按刚才的思路排序。请您指导。
|
-- 作者:有点蓝 -- 发布时间:2021/11/16 9:07:00 -- 参考:http://www.foxtable.com/webhelp/topics/2403.htm |
-- 作者:15666282205 -- 发布时间:2021/11/16 9:55:00 -- 老师,我看了帮助,相当于按类别编号。实际情况是这样:表设置为启动不加载,打开窗口时没有内容,点击“新增”则增加一行,其中登录人自动填入作为类别;如果是王某人登录,则类别是王某人,编号是“王某人001”;我用开发者登录,实现了第一个编号“开发者001”;再点新增的时候提示以下错误。提示中的“者00”实际是“开发者001”中的字,不知道为什么只显示一部分。我把编号这一列已设置成字符,没法设置成整数。请您指导。 .NET Framework 版本:4.0.30319.18408 Foxtable 版本:2020.5.29.8 错误所在事件:表,决算登记表,DataColChanged 详细错误信息: 调用的目标发生了异常。 从字符串“者00”到类型“Integer”的转换无效。 输入字符串的格式不正确。 |
-- 作者:有点蓝 -- 发布时间:2021/11/16 10:07:00 -- 贴出代码啊 |
-- 作者:15666282205 -- 发布时间:2021/11/16 10:10:00 -- 好了,老师,编号位数设置不对 |
-- 作者:15666282205 -- 发布时间:2022/4/6 11:38:00 -- 老师,在表的DataColChanged事件中以下代码实现了自动编号,但是只是在已显示的表的基础上增加序号,不能取后台的数据。我用的SQL阿里云数据库,请您指导。 \'------------------------------------自动编号---------------------------- 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(3,4)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("编号") = lb & Format(idx,"0000") End If End If End Select
|
-- 作者:有点蓝 -- 发布时间:2022/4/6 11:40:00 -- Dim idx As Integer max = e.DataTable.sqlCompute("Max(编号)","录单 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号 If max > "" Then \'如果存在最大编号 idx = CInt(max.Substring(3,4)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("编号") = lb & Format(idx,"0000") e.DataRow.save End If End If
|
-- 作者:15666282205 -- 发布时间:2022/4/6 13:20:00 -- 老师,下面代码里的取数范围(3,4)有可能存在不确定性,因为我用的是姓名+编码的方式,如果姓名是两个字话会出现什么情况? idx = CInt(max.Substring(3,4)) + 1 \'获得最大编号的后三位顺序号,并加1
|
-- 作者:有点蓝 -- 发布时间:2022/4/6 13:36:00 -- idx = CInt(max.Substring(max.length - 4)) + 1 |
-- 作者:15666282205 -- 发布时间:2022/4/6 13:42:00 -- 谢谢老师! |