Foxtable(狐表)用户栏目专家坐堂 → 序号自动增加问题


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

主题:序号自动增加问题

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


加好友 发短信
等级:二尾狐 帖子:528 积分:4165 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/10/26 9:27:00 [只看该作者]

三、按类别编号

假定有下图所示的一个表,编号根据类别生成,前两位为类别,后三位为顺序号:

图片点击可在新窗口打开查看

要自动生成上面的编号,可以将DataColChanged事件代码设置为:

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,3)) + 1 '获得最大编号的后三位顺序号,并加1
               
Else
                    idx =
1 '否则顺序号等于1
               
End If
                e.
DataRow("编号") = lb & Format(idx,"000")
            End
If
        End
If
End
Select

               

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


加好友 发短信
等级:二尾狐 帖子:528 积分:4165 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/10/26 9:32:00 [只看该作者]

老师,上面的代码实现了这样的功能:表有两列,一列是类别,另一列是根据类别编号。我想实现的功能是,表只有一列,首先录入A001,设计一个复制新增按钮,点击按钮则增加一列并自动编号为A002.依次类推。如果录入的是B001,则选中后复制新增为B002.如何实现呢?请您指导

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


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

编号有有规律,比如
1、长度必须一致,比如统一都是4位,不能一个是A002,然后下一个是AA001
2、前缀字母必须从小到大,比如上一个是A002,然后下一个是B001,不能上一个是B002,然后下一个从A001开始

没有规律的编号没有办法做的

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


加好友 发短信
等级:二尾狐 帖子:528 积分:4165 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/10/26 9:58:00 [只看该作者]

老师,规律符合您说的。第一行是手工录入的,比如录入AAA001,BBB001,CCC001,如果当前行选择的是AAA001,则复制新增时自动编号为AAA002;如果当前行选择的是BBB001,则新增为BBB002,依次类推,序号的起始点是由选择的当前行决定的。下面是项目中增加行的代码。编号增加的代码在表的datacolchangend事件中,参考11楼的代码。那个是两列数据,需要修改成一列数据。您受累看看好吗?
'------------------------自动复制选中行------------------------------
Dim r As Row = Tables("原材料进货记录").current
Dim Cols1() As String = {"经办人","类别","账务","客户名称","摘要"}
Dim dr2 As Row = Tables("原材料进货记录").AddNew()
For i As Integer = 0 To Cols1.Length -1
    dr2(Cols1(i)) = r(Cols1(i))
Next
[此贴子已经被作者于2022/10/26 10:03:45编辑过]

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


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

如果要根据选择的当前行生成新行的编号,不能放到datacolchanged事件处理,只能在按钮里,比如

Dim r As Row = Tables("原材料进货记录").current
dim idx as integer = CInt(r("编号").Substring(3)) + 1
Dim dr2 As Row = Tables("原材料进货记录").AddNew()
dr2("编号") = r("编号").Substring(0,,3) & Format(idx,"000")

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


加好友 发短信
等级:二尾狐 帖子:528 积分:4165 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/10/26 10:57:00 [只看该作者]

老师,提示如下错误,我没找到原因
.NET Framework 版本:4.0.30319.18408
Foxtable 版本:2020.5.29.8
错误所在事件:窗口,生产管理,Button32,Click
详细错误信息:
重载决策失败,因为没有可访问的“Substring”接受此数目的参数。


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


加好友 发短信
等级:超级版主 帖子:109720 积分:558310 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/10/26 11:01:00 [只看该作者]

输多了一个逗号,自己去掉

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


加好友 发短信
等级:二尾狐 帖子:528 积分:4165 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/10/26 13:15:00 [只看该作者]

完美解决,谢谢老师!

 回到顶部
总数 18 上一页 1 2