Foxtable(狐表)用户栏目专家坐堂 → [求助]请问各位大师为什么这个按类别的编号方法当用用代码合并的时候不正常?


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

主题:[求助]请问各位大师为什么这个按类别的编号方法当用用代码合并的时候不正常?

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


加好友 发短信
等级:幼狐 帖子:178 积分:1228 威望:0 精华:0 注册:2014/1/23 0:48:00
[求助]请问各位大师为什么这个按类别的编号方法当用用代码合并的时候不正常?  发帖心情 Post By:2014/3/16 16:26:00 [只看该作者]

用系统的高速合并,能够正常编号。在窗口用按钮click来合并,生成的编号都是一个样。不知道为什么。

按钮代码:

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
Dim mg As New Merger
mg.Format = "excel" '指定格式
mg.SourcePath = dlg.FileName
mg.SourceTableName = "sheet1$"
mg.DataTableName = "小包发货单"
mg.Merge()
End If

 

自动编号代码放在datacolchanged里,

Select e.DataCol.Name '自动生成子编码
    Case  "编号"
        If e.DataRow.IsNull("编号") Then
            e.DataRow("子编号") = Nothing
        Else
            Dim bh As  String = e.DataRow("编号")
            If e.DataRow("子编号").StartsWith(bh) = False  '如果子编号前缀不符
                Dim max  As  String
                Dim idx  As  Integer
                max = e.DataTable.Compute("Max(子编号)","编号 = '" & bh  & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该类别的最大编号
                If max > ""  Then  '如果存在最大编号
                    Dim l As Integer = bh.Length
                    idx = CInt(max.Substring(l,3)) + 1  '获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1  '否则顺序号等于1
                End  If
                e.DataRow("子编号") = bh & Format(idx,"000")
            End If
        End  If
    End  Select


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/3/16 22:54:00 [只看该作者]

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim mg As New Merger
    mg.Format = "excel" '指定格式
    mg.SourcePath = dlg.FileName
    mg.SourceTableName = "sheet1$"
    mg.DataTableName = "小包发货单"
    mg.Merge()
End If
For Each dr As DataRow In DataTables("小包发货单").Select("子编码 IS NULL")
    DataTables("小包发货单").DataCols("编号").RaiseDataColChanged(dr)
Next

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


加好友 发短信
等级:幼狐 帖子:178 积分:1228 威望:0 精华:0 注册:2014/1/23 0:48:00
  发帖心情 Post By:2014/3/16 23:15:00 [只看该作者]

还是一样。 后面都是001。。。还没有解决

[此贴子已经被作者于2014-3-16 23:39:44编辑过]

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2014/3/17 7:46:00 [只看该作者]

呵呵 max需要在保存情况下才能找到最大的编号,比如上一行是001  如果上一行没有保存,新增的行依旧是001.

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/3/17 8:17:00 [只看该作者]

代码没有看出问题,做例子发上来。

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


加好友 发短信
等级:幼狐 帖子:178 积分:1228 威望:0 精华:0 注册:2014/1/23 0:48:00
  发帖心情 Post By:2014/3/17 10:35:00 [只看该作者]

就是说代码合并的时候不是逐一保存行的咯?请问如何解决这个问题呢?

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


加好友 发短信
等级:幼狐 帖子:178 积分:1228 威望:0 精华:0 注册:2014/1/23 0:48:00
  发帖心情 Post By:2014/3/17 10:37:00 [只看该作者]

狐爸,代码在高速合并情况下是正常执行的哦。。例子稍等。

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


加好友 发短信
等级:幼狐 帖子:178 积分:1228 威望:0 精华:0 注册:2014/1/23 0:48:00
  发帖心情 Post By:2014/3/17 11:01:00 [只看该作者]

附excel表格“订单表”在项目文件夹里
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:打开文件对话框小例.zip


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/3/17 11:14:00 [只看该作者]

Dim cnt As Integer = DataTables("小包发货单").DataRows.count
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim mg As New Merger
    mg.Format = "excel" '指定格式
    mg.SourcePath = dlg.FileName
    mg.SourceTableName = "sheet1$"
    mg.DataTableName = "小包发货单"
    mg.Merge()
End If
For i As Integer = cnt To DataTables("小包发货单").DataRows.count -1
    Dim dr As DataRow = DataTables("小包发货单").DataRows(i)
    dr("子编号") = Nothing
Next
DataTables("小包发货单").DataCols("编号").RaiseDataColChanged("子编号 Is null")

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


加好友 发短信
等级:幼狐 帖子:178 积分:1228 威望:0 精华:0 注册:2014/1/23 0:48:00
  发帖心情 Post By:2014/3/17 12:40:00 [只看该作者]

终于没问题了。。谢谢狐爸~ 要好好学习一下。。


 回到顶部