Foxtable(狐表)用户栏目专家坐堂 → 还是新增行问题


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

主题:还是新增行问题

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


加好友 发短信
等级:一尾狐 帖子:410 积分:3682 威望:0 精华:0 注册:2017/4/8 8:59:00
还是新增行问题  发帖心情 Post By:2020/4/30 9:12:00 [只看该作者]

要求每次新增一行(一个记录)后,以下三个日期自动从同列中的最大日期取数加一个月自动填写
现在问题是:在重置相关列时出现错误,特别在重置cpbm列时,三个日期变化成又加了一个月并更新原有的所有行
                 每重置一次,加一个月了。晕死了
        我目的是:已经保存的列不参与重新计算或者第一行(日期最小的行)不参与计算。其他行可以计算,但是数据不用变化啊,只变化新增的行嘛


If e.DataCol.Name = "cpbm" Then
    If e.DataRow.IsNull("cpbm") OrElse e.DataRow.IsNull("fxfs") Then
        e.DataRow("fxrq") = Nothing
        e.DataRow("qxrq") = Nothing
        e.DataRow("zxrq") = Nothing
    Else
        If e.DataRow("fxfs")= "按月实际天数付" Then
            Dim ddr0 As DataRow
            Dim max As Date
            max = e.DataTable.Compute("Max(zxrq)")
            ddr0 = DataTables("dk_lxb").Find("[cpbm] = '" & e.DataRow("cpbm")  & "'","zxrq desc")
            If ddr0 IsNot Nothing
                Dim zx1 As Date = ddr0("zxrq") '止息日期
                Dim zx2 As Date = zx1.addmonths(1)   '第二次止息日期
                Dim fx1 As Date = ddr0("fxrq")
                Dim fx2 As Date = fx1.addmonths(1)
                Dim qx1 As Date = ddr0("qxrq")
                Dim qx2 As Date = qx1.addmonths(1)
                e.DataRow("zxrq") = zx2
                e.DataRow("fxrq") = fx2
                e.DataRow("qxrq") = qx2
            End If
        End If
    End If
End If

[此贴子已经被作者于2020/4/30 9:14:58编辑过]

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


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

这种逻辑不能重复重置列的,因为取的是最大值,每次重置最大值都会变化。重置列并不是所有情况都适合使用的。任何代码都不是万金油,要看逻辑和具体使用场景

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


加好友 发短信
等级:超级版主 帖子:110648 积分:563148 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/30 10:15:00 [只看该作者]

可以判断一下行状态

If e.DataCol.Name = "cpbm" Then
    If e.DataRow.IsNull("cpbm") OrElse e.DataRow.IsNull("fxfs") Then
        e.DataRow("fxrq") = Nothing
        e.DataRow("qxrq") = Nothing
        e.DataRow("zxrq") = Nothing
    Else
        If e.DataRow("fxfs")= "按月实际天数付" andalso  e.DataRow.rowstate <> = DataRowState.Unchanged Then


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


加好友 发短信
等级:超级版主 帖子:110648 积分:563148 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/30 10:16:00 [只看该作者]

或者
If e.DataRow("fxfs")= "按月实际天数付" andalso  e.DataRow.rowstate = DataRowState.Added Then


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


加好友 发短信
等级:一尾狐 帖子:410 积分:3682 威望:0 精华:0 注册:2017/4/8 8:59:00
  发帖心情 Post By:2020/4/30 10:55:00 [只看该作者]

Select Case e.DataCol.name
    Case "cpbm","fxfs"
If e.DataCol.Name = "cpbm" Then
            If e.DataRow.IsNull("cpbm") OrElse e.DataRow.IsNull("fxfs") Then
            e.DataRow("fxrq") = Nothing
            e.DataRow("qxrq") = Nothing
          ' e.DataRow("zxrq") = Nothing
        Else
                If e.DataRow("fxfs")= "按月实际天数付" AndAlso  e.DataRow.rowstate <> DataRowState.Unchanged Then
              Dim ddr0 As DataRow
                Dim max As Date
                max = e.DataTable.Compute("Max(zxrq)")
                ddr0 = DataTables("dk_lxb").Find("[cpbm] = '" & e.DataRow("cpbm")  & "'","zxrq")               
                If ddr0 IsNot Nothing
                   Dim zx1 As Date = ddr0("zxrq") '止息日期
                  Dim zx2 As Date = zx1.addmonths(1)   '第二次止息日期
                   Dim fx1 As Date = ddr0("fxrq")
                   Dim fx2 As Date = fx1.addmonths(1)
                  Dim qx1 As Date = ddr0("qxrq")
                  Dim qx2 As Date = qx1.addmonths(1)
                   e.DataRow("zxrq") = zx2 
                  e.DataRow("fxrq") = fx2
                  e.DataRow("qxrq") = qx2
                End If                
           End If
       End If
End If
End Select
按老师的方法一操作后,重置不影响了,但是只能增加一次是正确的。第二次以后增加行,都是上一行的复制品。月份不会变化了,求解

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


加好友 发短信
等级:超级版主 帖子:110648 积分:563148 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/30 10:59:00 [只看该作者]

截图说明一下

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


加好友 发短信
等级:一尾狐 帖子:410 积分:3682 威望:0 精华:0 注册:2017/4/8 8:59:00
  发帖心情 Post By:2020/4/30 11:02:00 [只看该作者]

老师 我少了个desc  现在可以了。只是不能重置,否则的话最后一行会变化,以前的倒不会变化了。不过可以用了。谢谢。问一下如何禁止重置列呢?我想应该发布后的程序不会了,哈


不过还是不能区分大小月份,如果4月份30日,加一个月应该5月份应该是31。程序还是5月30日
[此贴子已经被作者于2020/4/30 11:09:25编辑过]

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


加好友 发短信
等级:超级版主 帖子:110648 积分:563148 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/30 11:15:00 [只看该作者]

获取月份的最后一天:http://www.foxtable.com/webhelp/topics/1337.htm

 回到顶部