以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]关联表相关问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=50462) |
-- 作者:lesliecheung912 -- 发布时间:2014/5/7 9:52:00 -- [求助]关联表相关问题 各位老师好,先遇到一关联表问题,还请各位老师帮忙看一下 如图所示,各控件都绑定到主表的各个字段,窗口中的表绑定的关联表,且档案编号是按照流水号自动变好的。 ERROR:当新增档案明细时,如果各控件只有档案编号一个有值,其他空间没有值的时候,点新增档案明细时系统会自动关闭。老师们认为是哪里有问题呢? 按钮【新增档案明细】的代码为:Dim r As Row = Tables("档案管理总表.档案管理明细").Addnew \'撤销锁定表 DataTables("档案管理明细").AllowEdit = True 顺便再问一个问题哈,当我新增一条档案明细后点上一条下一条时,档案明细不会保存的,需不需要在上一条下一条中加条件:如果没保存明细就不让它执行上一条或下一条的,若需要该如何定条件。亦或是在关闭的时候给人提醒,若不保存就不能关闭? |
-- 作者:有点甜 -- 发布时间:2014/5/7 10:02:00 -- 第二个问题,看这里 http://www.foxtable.com/help/topics/2263.htm
|
-- 作者:有点甜 -- 发布时间:2014/5/7 10:05:00 -- 第一个问题,关闭的问题,是不是你的关联是多列关联?
在关联表新增行的时候,必须先保证关联列是有值的方可。 [此贴子已经被作者于2014-5-7 10:04:55编辑过]
|
-- 作者:lesliecheung912 -- 发布时间:2014/5/7 10:13:00 -- 先感谢有点甜老师,看你的视频教程学到了不少东西。 第一个问题,关联列只有一列就是档案编号,应该不是您说的那类错误。 第二个问题,上一条下一条是针对主表来操作的,但是我的问题是明细表中新增明细或者修改明细没有保存的情况,也需要在上一条下一条写上with tables("档案明细")之后的判断吗?应该不是这样吧。
|
-- 作者:lesliecheung912 -- 发布时间:2014/5/7 10:25:00 -- 帮助中:将窗口的BeforeClose事件代码设置为: If Tables("员工").Current.DataRow.RowState <> DataRowState.Unchanged Then \'如果当前行已经修改过 但是我新增了档案明细后如果已经执行了上一条下一条的话,以上代码就不适用了吧,应该怎么改呢?请原谅我的愚钝 |
-- 作者:有点甜 -- 发布时间:2014/5/7 10:26:00 -- 1、你去看看 档案明细 的datacolchanged事件,看写了什么代码,贴出来看看;
2、粗犷一点的做法就是,直接检测 档案明细 是否有修改 http://www.foxtable.com/help/topics/0387.htm
2、细致一点的做法,你就需要循环检测
Dim hasSave As Boolean = True If hasSave Then |
-- 作者:lesliecheung912 -- 发布时间:2014/5/7 10:34:00 -- 辛苦了甜老师。 档案明细表的Datacolchanged事件: \'多列的跨表更新 If e.DataCol.Name = "档案编号" Then If e.NewValue Is Nothing Then e.DataRow("档案名称") = Nothing e.DataRow("档案类型") = Nothing e.DataRow("归档日期") = Nothing e.DataRow("保管期限") = Nothing e.DataRow("部门2") = Nothing e.DataRow("部门2") = Nothing e.DataRow("办事处") = Nothing e.DataRow("档案移交人") = Nothing e.DataRow("档案室") = Nothing e.DataRow("档案柜") = Nothing Else Dim dr As DataRow = e.DataRow.GetParentRow("档案管理总表") If dr IsNot Nothing e.DataRow("档案编号") = dr("档案编号") e.DataRow("档案名称") = dr("档案名称") e.DataRow("档案类型") = dr("档案类型") e.DataRow("归档日期") = dr("归档日期") e.DataRow("保管期限") = dr("保管期限") e.DataRow("部门1") = dr("部门1") e.DataRow("部门2") = dr("部门2") e.DataRow("办事处") = dr("办事处") e.DataRow("档案移交人") = dr("档案移交人") e.DataRow("档案室") = dr("档案室") e.DataRow("档案柜") = dr("档案柜") End If End If End If \'将录入的主表的字段关联到明细表中 Dim zdmc As DataRow zdmc = DataTables("档案管理总表").Find("[档案编号] = \'" & e.DataRow("档案编号") & "\'") If zdmc IsNot Nothing Then e.DataRow("档案名称") = zdmc("档案名称") e.DataRow("档案类型") = zdmc("档案类型") e.DataRow("归档日期")=zdmc("归档日期") e.DataRow("保管期限") = zdmc("保管期限") e.DataRow("部门1") = zdmc("部门1") e.DataRow("部门2")=zdmc("部门2") e.DataRow("办事处") = zdmc("办事处") e.DataRow("档案移交人") = zdmc("档案移交人") e.DataRow("档案室")=zdmc("档案室") e.DataRow("档案柜") = zdmc("档案柜") End If 档案管理总表的datacolchanged事件:If e.DataCol.name="档案编号" AndAlso e. DataRow.isnull("档案编号")=False Then Dim dr As DataRow = DataTables("档案管理明细").addnew dr("档案编号")=e.DataRow("档案编号") End If \'关联表 Select Case e.DataCol.Name Case "档案编号" , "档案名称","档案类型","归档日期","保管期限","部门1","部门2","办事处","档案移交人","档案室","档案柜" Dim drs As List(Of DataRow) = e.DataRow.GetChildRows("档案管理明细") For Each dr As DataRow In drs dr(e.DataCol.Name) = e.NewValue Next End Select 您看看是不是代码有问题啊?
|
-- 作者:有点甜 -- 发布时间:2014/5/7 10:51:00 -- 把下面这一段去掉。
\'将录入的主表的字段关联到明细表中
Dim zdmc As DataRow
zdmc = DataTables("档案管理总表").Find("[档案编号] = \'" & e.DataRow("档案编号") & "\'")
If zdmc IsNot Nothing Then
e.DataRow("档案名称") = zdmc("档案名称")
e.DataRow("档案类型") = zdmc("档案类型")
e.DataRow("归档日期")=zdmc("归档日期")
e.DataRow("保管期限") = zdmc("保管期限")
e.DataRow("部门1") = zdmc("部门1")
e.DataRow("部门2")=zdmc("部门2")
e.DataRow("办事处") = zdmc("办事处")
e.DataRow("档案移交人") = zdmc("档案移交人")
e.DataRow("档案室")=zdmc("档案室")
e.DataRow("档案柜") = zdmc("档案柜")
End If
|
-- 作者:有点甜 -- 发布时间:2014/5/7 10:58:00 -- 最后不行的话,就上传一个例子吧。 |
-- 作者:lesliecheung912 -- 发布时间:2014/5/7 11:03:00 -- 你好厉害啊甜姐,能给我讲讲为什么嘛 |