以文本方式查看主题

-  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

顺便再问一个问题哈,当我新增一条档案明细后点上一条下一条时,档案明细不会保存的,需不需要在上一条下一条中加条件:如果没保存明细就不让它执行上一条或下一条的,若需要该如何定条件。亦或是在关闭的时候给人提醒,若不保存就不能关闭?
请老师们帮忙,多谢!
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20140507093444.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间: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 \'如果当前行已经修改过
    e.Cancel = 
True
End
 If

但是我新增了档案明细后如果已经执行了上一条下一条的话,以上代码就不适用了吧,应该怎么改呢?请原谅我的愚钝


--  作者:有点甜
--  发布时间:2014/5/7 10:26:00
--  

 1、你去看看 档案明细 的datacolchanged事件,看写了什么代码,贴出来看看;

 

 2、粗犷一点的做法就是,直接检测 档案明细 是否有修改 http://www.foxtable.com/help/topics/0387.htm

 

 2、细致一点的做法,你就需要循环检测

 

Dim hasSave As Boolean = True
For Each r As Row In Tables("档案管理总表.档案管理明细").Rows
    If r.DataRow.RowState <> DataRowState.Unchanged Then
        hasSave = False
    End If
Next

If hasSave Then
    \'下一条
End If


--  作者: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
--  
你好厉害啊甜姐,能给我讲讲为什么嘛