Foxtable(狐表)用户栏目专家坐堂 → 关于 根据条件复制上一行记录内容疑问


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

主题:关于 根据条件复制上一行记录内容疑问

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
关于 根据条件复制上一行记录内容疑问  发帖心情 Post By:2010/6/30 11:44:00 [只看该作者]

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图未命名.jpg
图片点击可在新窗口打开查看

 

表中,DataColChanged 事件代码如下

Select Case e.DataCol.Name
    Case "是否有管理责任"
        if e.DataRow.IsNull("是否有管理责任") = False Then
            if e.DataRow("是否有管理责任") = "是" then
                Tables("表A").AddNew(1)
                Dim drs As List(Of DataRow) = DataTables("表A").Select("")
                For n As integer = 0 To drs.Count - 1 
                    If n > 0 Then 
                        drs(n)("姓名") = drs(n-1)("直接上司")
                        drs(n)("失职扣分") = drs(n-1)("失职扣分")*drs(n-1)("上司责任比例")
                        drs(n)("工作内容") = drs(n-1)("姓名") & drs(n-1)("工作内容") 
                    End If
                Next
            end if
        end if
End Select

 

疑问:两人同时操作时,会不会有复制错误的可能? 

        假设:A操作者正在输入 第1行,此时  _Identify = 1

                B操作者正在输入 第2行,此时  _Identify = 2

             

                 当 A 在  “是否有管理责任" 列中输入  "是”,执行上面命令。新增一行。_Identify = 3 ,,,,drs(n-1) 不是等于2了吗??

                我的理解是 复制的数据就不是A操作者的了。而是B操作者的数据了。。

                 怎么样解决这种问题的出现?

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:根据选项复制上一行.table

[此贴子已经被作者于2010-6-30 12:06:36编辑过]

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


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

 实际测试就知道了

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2010/6/30 17:16:00 [只看该作者]

狐爸,请看图

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图未命名.jpg
图片点击可在新窗口打开查看

 

表中已有一条记录。

现在输入第二条记录,当我在  [是否有管理责任] 列中选择

希望得到的结果是:表格自动新增加一行

     新增行中,姓名 = 上一行的 直接上司

                   工作内容 = 上一行的  姓名 & 工作内容

                   失职扣分 = 上一行的 失职扣分 * 上司职责比例

         
 

现在文件中的代码是错误的。 在  [是否有管理责任] 列中选择 以后。得到的结果是


图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看

所有的行都重新计算了。。。

 

 


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


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

用DataRowAdding事件


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


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

或者:

 

 

Select Case e.DataCol.Name
    Case "是否有管理责任"
        if e.DataRow.IsNull("是否有管理责任") = False Then
            if e.DataRow("是否有管理责任") = "是" then

                Dim dr1 As Row = Tables("表A").rows(Tables("表A").Rows.Count -1)
                Dim dr2 As Row  = Tables("表A").AddNew()
                dr2("姓名") = dr1("直接上司")
                dr2("失职扣分") = dr1("失职扣分") * dr1("上司责任比例")
                dr2("工作内容") = dr1("姓名") & dr1("工作内容")  
            end if
        end if
End Select

 

其实问题就是简化为:如何获得最后一行和新增加的行。

[此贴子已经被作者于2010-6-30 17:24:21编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2010/6/30 17:55:00 [只看该作者]

谢谢狐爸!

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2010/7/2 20:04:00 [只看该作者]

狐爸。5楼已经实现了复制上一行的功能。

       还有一个问题请麻烦您一下。
        
    

      根据5楼的代码,已复制了一行新的记录。
           dr2("失职扣分") = dr1("失职扣分") * dr1("上司责任比例")
           dr2("工作内容") = dr1("姓名") & dr1("工作内容") 
      失职扣分列 与 工作内容列 都有了数据
    
     假如,又返回到第一行,重新修改了第一行的  失职扣分 列中的数据。怎么让 第二行 的 失职扣分列,自动更新??


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


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

这个功能应该用AfterEdit事件。

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2010/7/3 8:38:00 [只看该作者]

在DataColChanged 事件中。输入此代码,可实现这功能。 

多增加一个,,记录列 记录跟踪编码

 

    case “失职扣分”
        Dim Filter As String = "[_Identify] > " & e.DataRow("_Identify") & " And  [记录跟踪编码] = '" & dr("记录跟踪编码") & "'"
        Dim drs As List(Of DataRow) = DataTables("表A").Select(Filter)
        For Each rd As DataRow In drs
            If rd.Locked = False
                rd("失职扣分") = dr("失职扣分") * dr("上司责任比例")
            End If
        Next

 

这样,同 AfterEdit事件  比起来,应该差不多吧,有没有什么逻辑上的错误?


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


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

不懂你的意思,你不是修改某行后,自动更新其后的一行吗?你这好像是更新其后所有的行,而且这些行的失职扣分列内容将完全相同。

这个应该你根据自己的需要编写调试代码,有问题再提问,因为只有你自己明白自己的需要。


 回到顶部
总数 13 1 2 下一页