以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]多列跨表有条件引用  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=95035)

--  作者:倪远歌
--  发布时间:2017/1/8 20:56:00
--  [求助]多列跨表有条件引用
事情是这个样子的,首先总表的结构是这样的

总表有三种包装材料,总表中三种包材的长、宽、高、重量等均引用表二包装材料表外尺寸长宽高
列名称不一样。。
我在引用包装材料表的时候使用了以下代码
If e.DataCol.Name = "Ⅰ级包装_包装材料一_编码" Then
    If e.NewValue Is Nothing Then
        e.DataRow("Ⅰ级包装_包装材料一_长") = Nothing
        e.DataRow("Ⅰ级包装_包装材料一_宽") = Nothing
        e.DataRow("Ⅰ级包装_包装材料一_高") = Nothing
        e.DataRow("Ⅰ级包装_包装材料一_纸箱") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("包材数据库").Find("[包材编码] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            e.DataRow("Ⅰ级包装_包装材料一_纸箱") = dr("包材名称")
            e.DataRow("Ⅰ级包装_包装材料一_长") = dr("外尺寸_长")
            e.DataRow("Ⅰ级包装_包装材料一_宽") = dr("外尺寸_宽")
            e.DataRow("Ⅰ级包装_包装材料一_高") = dr("外尺寸_高")
            e.DataRow("Ⅰ级包装_包装材料一_重量") = dr("重量")
        End If
    End If
End If
虽然部分与包装材料表可以对应上的编码能够自动引用长宽高等数据
但是这些自动引用的长宽高等数据依然在可编辑状态
问题一:怎样使这些成功引用的数据处在不可编辑状态
 
同时,使那些不在包装材料表中的编码对应的长宽高数据处在可编辑状态?
 
 
第二,更新包装材料表的数据怎样使总表对应的数据同时更新?
我写的代码
Select Case e.DataCol.Name
    Case "外尺寸_长","外尺寸_宽","外尺寸_高","重量"
        Dim Filter As String = "[Ⅰ级包装_包装材料一_编码] = \'" & e.DataRow("包材编码") & "\'"
        Dim drs As List(Of DataRow) = DataTables("数据库").Select(Filter)
        For Each dr As DataRow In drs
            dr(e.DataCol.Name) = e.NewValue
        Next
End Select
这段代码没看出问题在哪
由于是新手,刚刚上手一天,还望大神多多指教图片点击可在新窗口打开查看
 
 

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

图片点击可在新窗口打开查看此主题相关图片如下:捕获.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2017/1/8 21:10:53编辑过]

--  作者:有点色
--  发布时间:2017/1/8 22:46:00
--  

1、StartEdit事件

 

Select Case e.Col.name
    Case "Ⅰ级包装_包装材料一_长", "Ⅰ级包装_包装材料一_宽", "Ⅰ级包装_包装材料一_高", "Ⅰ级包装_包装材料一_纸箱", "Ⅰ级包装_包装材料一_重量"
        Dim dr As DataRow = DataTables("包材数据库").Find("[包材编码] = \'" & e.Row("Ⅰ级包装_包装材料一_编码") & "\'")
        If dr IsNot Nothing
            e.cancel = True
        End If
End Select


--  作者:有点色
--  发布时间:2017/1/8 22:49:00
--  

2、

 

Select Case e.DataCol.Name
    Case "外尺寸_长","外尺寸_宽","外尺寸_高","重量"
        Dim Filter As String = "[Ⅰ级包装_包装材料一_编码] = \'" & e.DataRow("包材编码") & "\'"
        Dim drs As List(Of DataRow) = DataTables("数据库").Select(Filter)
        For Each dr As DataRow In drs
            dr("Ⅰ级包装_包装材料一_长") = e.datarow("外尺寸_长")
            dr("Ⅰ级包装_包装材料一_宽") = e.datarow("外尺寸_宽")
            dr("Ⅰ级包装_包装材料一_高") = e.datarow("外尺寸_高")
        Next
End Select


--  作者:倪远歌
--  发布时间:2017/1/8 23:38:00
--  

谢谢大神!!!!!

图片点击可在新窗口打开查看