以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  一表自动填充到其他多个表中  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=97916)

--  作者:蓝蚂蚁
--  发布时间:2017/3/21 9:11:00
--  一表自动填充到其他多个表中

有个计划总表,想把这个表里面的计划按事先设好的比例,自动填充到手术室和外科中(可能会有多个其他科室的表)

下面是图示,请问老师改如何实现。

 


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

图片点击可在新窗口打开查看此主题相关图片如下:手术室数据图.jpg
图片点击可在新窗口打开查看

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


 


--  作者:蓝蚂蚁
--  发布时间:2017/3/21 9:11:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:比例.jpg
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:数据分解列子.zip


--  作者:有点色
--  发布时间:2017/3/21 9:24:00
--  

DataColChanged事件

 

Dim dt1 As DataTable = DataTables("计划总表")
Dim dt2 As DataTable = DataTables("手术室")
Dim dt3 As DataTable = DataTables("外科")
Dim dt4 As DataTable = DataTables("比例")
Dim dr1 As DataRow = e.DataRow
Dim flt As String = "编码 = \'" & dr1("编码") & "\'"
Dim dr2 As DataRow = dt2.Find(flt)
If dr2 Is Nothing Then dr2 = dt1.addnew
For Each dc As DataCol In dt2.DataCols
    dr2(dc.Name) = dr1(dc.name)
Next
Dim fdr As DataRow = dt4.Find(flt)
dr2("数量") = fdr("手术室") * dr1("数量")
dr2 = dt3.Find(flt)
If dr2 Is Nothing Then dr2 = dt1.addnew
For Each dc As DataCol In dt3.DataCols
    dr2(dc.Name) = dr1(dc.name)
Next
fdr = dt4.Find(flt)
dr2("数量") = fdr("外科") * dr1("数量")


--  作者:蓝蚂蚁
--  发布时间:2017/3/21 9:43:00
--  
谢谢 完美解决 再次感谢!
--  作者:蓝蚂蚁
--  发布时间:2017/3/23 23:33:00
--  
请教老师一个问题为什么这条语句不用ENDIF If dr2 Is Nothing Then dr2 = dt1.addnew
--  作者:有点色
--  发布时间:2017/3/23 23:57:00
--  

那个是简写,只要一条语句的时候,可以那样写。

 

If dr2 Is Nothing Then

    dr2 = dt1.addnew

End If


--  作者:蓝蚂蚁
--  发布时间:2017/3/24 8:09:00
--  
明白了 谢谢,但问题又来了:
Dim dt4 As DataTable = DataTables("领用总表") \'产品在各个科室的占用比例在这个DataTables("领用总表")表中
Dim dt2 As DataTable = DataTables("计划分派手术室")  
Dim dr1 As DataRow = e.DataRow
Dim flt As String = "字典编码 = \'" & dr1("字典编码") & "\'"
Dim dr2 As DataRow = dt2.Find(flt)   \'【这条语句不太懂,刚开始的时候表DataTables("计划分派手术室")是空的,即没有数据,如果没有数据,这条语句应该有问题吧
If e.DataCol.Name = "逻辑列" AndAlso e.DataRow("逻辑列") = True Then  \'【在这个代码的表中(采购计划表)加入逻辑列,只要选中,则把选中的数据按下面的条件复制到表DataTables("计划分派手术室")中】
      Dim fdr As DataRow = dt4.Find(flt) 
      If fdr("字典编码")<>"" Then \'如果字典编码在占比表中找到
         Dim dr As DataRow = DataTables("计划分派手术室").AddNew
         For Each dc As DataCol In DataTables("计划分派手术室").DataCols
            dr(dc.Name) = e.DataRow(dc.Name)
        Next
         If fdr IsNot Nothing Then
           dr2("数量") = fdr("手术室") * dr1("数量")
        Else
           dr2("数量")=0
        End If
     End If
End If

但运行代码的时候提示:
.NET Framework 版本:2.0.50727.5466
Foxtable 版本:2016.7.29.1
错误所在事件:表,采购计划表,DataColChanged
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。

请老师有空帮指点一下,再次感谢!

[此贴子已经被作者于2017/3/24 8:11:43编辑过]

--  作者:有点蓝
--  发布时间:2017/3/24 8:48:00
--  
看代码要看前后的逻辑,3楼的代码,如果没有数据下面一句就会增加一行

Dim dr2 As DataRow = dt2.Find(flt)
If dr2 Is Nothing Then dr2 = dt1.addnew

运行3楼的代码,好好理解一下

--  作者:蓝蚂蚁
--  发布时间:2017/3/26 19:07:00
--  
多谢有点色和有点蓝老师的解答,谢谢。问题已经解决