以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  当前行自动填充  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=56961)

--  作者:l451826728
--  发布时间:2014/9/16 8:46:00
--  当前行自动填充

通过表A下的窗口Button1的click,将当前行数据自动新增填充到表B(两表结构相似,大部分列名称相同),但是多次单击click会针对当前行在表B新增填充多条雷同行,有没有办法依据两表"人员编码"列当前行是否一致,不一致则填充到表B,一致则返回不填充并锁定当前行?click事件代码如下:

   Tables("体检人员清单").Current.Save()
Dim r As Row = Tables("体检人员清单").Current
Dim  dr As DataRow  = DataTables("体检登记流水").Addnew
dr("人员编码") = r("人员编码")
dr("体检序号") = r("体检序号")
dr("姓名")= r("姓名")
dr("性别") = r("性别")
dr("村") = r("村")
dr("组") = r("组")
dr("出生日期") = r("出生日期")
dr("身份证号") = r("身份证号")
dr("管理属性") = r("管理属性")
dr("联系电话") = r("联系电话")
dr("体检时间") = r("体检时间")

另外,在此窗口Button2的click事件里面,写入了撤销以上填充操作的代码,以实现判断两表当前行人员编码是否一致,一致则删除表B当前行的目的,但是执行到表B无当前行的时候,便会出现"未将对象引用设置到对象实例"的报错,我的代码如下:

If Tables("体检人员清单").Current.DataRow("人员编码") = Tables("体检登记流水").Current.DataRow("人员编码") Then \'如果流水表和人员清单表当前行的人员编码相同
        Tables("体检登记流水").Current.Delete   \'那么删除流水表的当前行
    Else 
        If Tables("体检登记流水").rows.count = 0 Then \'否则判断如果流水表不是Nothing
         Tables("体检人员清单").Current.Locked = False    \'那么解锁清单表当前行
     End If
End If

以上代码应该怎样改,谢谢各位老师了,琢磨了一晚上没弄好,谢谢!


--  作者:Bin
--  发布时间:2014/9/16 8:52:00
--  
1. 利用FIND找到是否有相同行 http://www.foxtable.com/help/topics/0396.htm

2. 要判断一下当前行是否为空 if Tables("体检人员清单").Current isnot nothing then  再执行其他

--  作者:l451826728
--  发布时间:2014/9/16 10:26:00
--  

谢谢,虽然不是用find,但总算是解决了,Button1代码如下:

If Tables("体检登记流水").Current Is Nothing Then  \'如果体检登记流水表当前行为空
      Dim r As Row = Tables("体检人员清单").Current
      Dim  dr As DataRow  = DataTables("体检登记流水").Addnew
        dr("人员编码") = r("人员编码")
        dr("体检序号") = r("体检序号")
        dr("姓名")= r("姓名")
        dr("性别") = r("性别")
        dr("村") = r("村")
        dr("组") = r("组")
        dr("出生日期") = r("出生日期")
        dr("身份证号") = r("身份证号")
        dr("管理属性") = r("管理属性")
        dr("联系电话") = r("联系电话")
        dr("体检时间") = r("体检时间")
     ElseIf Tables("体检登记流水").Current IsNot Nothing Then  \'如果体检登记流水表当前行不为空
         If Tables("体检人员清单").Current.DataRow("人员编码") <> Tables("体检登记流水").Current.DataRow("人员编码") Then \'如果体检人员清单表和体检登记流水表当前行的人员编码不同
       Dim r As Row = Tables("体检人员清单").Current
       Dim  dr As DataRow  = DataTables("体检登记流水").Addnew
        dr("人员编码") = r("人员编码")
        dr("体检序号") = r("体检序号")
        dr("姓名")= r("姓名")
        dr("性别") = r("性别")
        dr("村") = r("村")
        dr("组") = r("组")
        dr("出生日期") = r("出生日期")
        dr("身份证号") = r("身份证号")
        dr("管理属性") = r("管理属性")
        dr("联系电话") = r("联系电话")
        dr("体检时间") = r("体检时间")
    End If
End If

 

Button2代码如下:

If Tables("体检登记流水").Current IsNot Nothing Then  \'如果体检登记流水表当前行不为空
    If Tables("体检人员清单").Current.DataRow("人员编码") = Tables("体检登记流水").Current.DataRow("人员编码") Then \'如果体检人员清单表和体检登记流水表当前行的人员编码相同
     Tables("体检登记流水").Current.Delete   \'那么删除流水表的当前行
    End If
End If

 

 

还是要感谢Bin老师!!!