以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助!关于跨表计算的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=5716)

--  作者:zzbyhz
--  发布时间:2010/1/1 22:47:00
--  求助!关于跨表计算的问题
我在设计一个小软件时遇到一个问题: 有两个表:甲、乙,甲表中有A名称、A数量、A重量、B名称、B数量、B重量六列(必须如此设置六列),乙表中有X名称、Y每米重量两列。甲乙两表已作关联,甲表为子表。 甲表中的A名称和B名称需到乙表中查找并调用与之相对应的Y每米重量,参与甲表中的计算, 即:A重量=乙表中与A名称对应的Y每米重量×A数量 B重量=乙表中与B名称对应的Y每米重量×B数量 当甲表从乙表中调用与B名称对应的Y每米重量时,却总是调用与A名称对应的Y每米重量而不能正确调用。 这个问题如何解决? 请各位大侠指点指点。谢谢!!! 现将附件上传,请程版主及各位大侠指点! 问题在柱构件工程量计算表中的"角钢二_重量"
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:工程项目核算.rar

[此贴子已经被作者于2010-1-2 0:51:26编辑过]

--  作者:wqc360
--  发布时间:2010/1/1 23:25:00
--  

来个示范文件看看


--  作者:程兴刚
--  发布时间:2010/1/1 23:27:00
--  

问题不算复杂,估计您要是上传文件比您写作半天解决问题更快!


--  作者:bjljb
--  发布时间:2010/1/2 1:58:00
--  
楼主所提问题的关键在于:父表和子表之间只能通过确定的某一列来建立关联,不能用父表的一列去对应同一个子表的多列。
所以“角钢二_重量”列的公式中:Parent(型号_构件).每米重量,其实还是根据“角钢一_型号”列指定的型号去到角钢型号表中去取值,而并非楼主所希望的根据“角钢二_型号”列指定的型号去到角钢型号表中去取值。

解决方案一:把角钢型号表复制一份,不妨命名为角钢型号2,然后仿照原来已经建立的关联再建立一个关联“型号_构件2”,公式改为:Parent(型号_构件2).每米重量……即可;

解决方案二:把“角钢二_重量”列改为数据列,然后在DataColChanged事件中用Find方法的代码来实现。

--  作者:zzbyhz
--  发布时间:2010/1/2 12:05:00
--  
我是一个刚刚才学狐表两天的菜鸟,很多东西都是边学边实践,有很多东西还不太明白.试着用代码的时候,仿造《使用手册.跨表计算》里的代码,略作修改,可是老是出现错误提示(见附件)
图片点击可在新窗口打开查看此主题相关图片如下:截图00.jpg
图片点击可在新窗口打开查看
,也不知是哪里出错了。请各位指点纠正。谢谢!(已在表中增加了一列数据列角钢二重量A)
[此贴子已经被作者于2010-1-2 12:15:18编辑过]

--  作者:czy
--  发布时间:2010/1/2 12:36:00
--  
你的代码放错地了,应该用到DataColChanged事件中。
--  作者:zzbyhz
--  发布时间:2010/1/2 14:22:00
--  
谢谢CZY版主的指点!已按照指点将代码放到DataColChanged事件中,可是,一旦执行将角钢二型号改变后,却又出现错误提示,不知是何故?还望指点!
图片点击可在新窗口打开查看此主题相关图片如下:截图02.jpg
图片点击可在新窗口打开查看

--  作者:yangming
--  发布时间:2010/1/2 15:58:00
--  

可能是列名称有问题,多层标题应该如何写,你看看帮助

[此贴子已经被作者于2010-1-2 16:02:57编辑过]

--  作者:czy
--  发布时间:2010/1/2 18:14:00
--  
角钢二重量,角钢二重量A  为数据列。
将代码改成:

if e.DataCol.Name = "角钢二型号" Then
    Dim dr1 As DataRow = e.DataRow
    if dr1.IsNull("角钢二型号") then
        dr1("角钢二重量A") = Nothing
    Else
        Dim dr As Datarow = DataTables("角钢型号").Find("[型号] = \'" & dr1("角钢二型号") & "\'")
        if dr IsNot Nothing Then
            dr1("角钢二重量A") = dr("每米重量") * dr1("构件数量") * dr1("角钢二数量")
        End If
    End If
End If

--  作者:zzbyhz
--  发布时间:2010/1/2 19:01:00
--  
解决了,谢谢CZY版主!!!