以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]datacolchange多列连续发生变化  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=74819)

--  作者:huhu
--  发布时间:2015/9/19 20:49:00
--  [求助]datacolchange多列连续发生变化
我想问一下,是不是A列值发生变化,B列自动从某个表取出某个值。那就是说B列也发生了变化,那么C列值也应该可以从另外一个表取出某个值吧。
代码如下:可是没有实现,是怎么回事。
发生变化的列是怀疑模块,那么模块维护人邮箱从模块名称库取出值。
发生变化的列是模块维护人邮箱,希望研发分机号从技术支持信息表取出手机号码的值。
datacolchange代码:
If e.DataCol.Name = "怀疑模块" Then
    Dim nms() As String = {"模块维护人","模块维护人邮箱","研发组长","研发组长邮箱","研发组名","研发部门"}
    If e.NewValue Is Nothing Then
        For Each nm As String In nms
            e.DataRow(nm) = Nothing
        Next
    Else
        Dim dr As DataRow
        dr = DataTables("模块名称库").Find("[模块名称] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
        End If
    End If
End If
If e.DataCol.Name = "模块维护人邮箱" Then
    If e.NewValue Is Nothing Then
        e.DataRow("研发分机号") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("技术支持信息表").Find("[name] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            e.DataRow("研发分机号") = dr("手机号码")
        End If
    End If
End If

--  作者:大红袍
--  发布时间:2015/9/20 12:46:00
--  
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
 
改成
 
SystemReady = False
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
SystemReady = True

--  作者:huhu
--  发布时间:2015/9/21 10:19:00
--  
改为这样还是不显示研发分机号。请问哪里不对?
If e.DataCol.Name = "怀疑模块" Then
    Dim nms() As String = {"模块维护人","模块维护人邮箱","研发组长","研发组长邮箱","研发组名","研发部门"}
    If e.NewValue Is Nothing Then
        For Each nm As String In nms
            e.DataRow(nm) = Nothing
        Next
    Else
        Dim dr As DataRow
        dr = DataTables("模块名称库").Find("[模块名称] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            Systemready = False
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
            Systemready = True
        End If
    End If
End If

If e.DataCol.Name = "模块维护人邮箱" Then
    If e.NewValue Is Nothing Then
        e.DataRow("研发分机号") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("技术支持信息表").Find("[name] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            Systemready = False
            e.DataRow("研发分机号") = dr("手机号码")
            Systemready = True
        End If
    End If
End If

--  作者:大红袍
--  发布时间:2015/9/21 10:21:00
--  
你修改 模块维护人邮箱 列,才会去查手机号码赋值。如果不赋值,你加入msgbox,看是否查找到数据。
--  作者:huhu
--  发布时间:2015/9/21 11:10:00
--  
之前模块维护人邮箱列值为空,现在怀疑模块有值,同时模块维护人邮箱也有值了。也就说说模块维护人邮箱的值变动了,那么应该在技术支持信息表,取出对应的手机号码。可实际上红色代码没执行。
If e.DataCol.Name = "怀疑模块" Then
    Dim nms() As String = {"模块维护人","模块维护人邮箱","研发组长","研发组长邮箱","研发组名","研发部门"}
    If e.NewValue Is Nothing Then
        For Each nm As String In nms
            e.DataRow(nm) = Nothing
        Next
    Else
        Dim dr As DataRow
        dr = DataTables("模块名称库").Find("[模块名称] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            Systemready = False
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
            Systemready = True
            msgbox(e.DataRow("模块维护人邮箱"))
        End If
    End If
End If

If e.DataCol.Name = "模块维护人邮箱" Then
    If e.NewValue Is Nothing Then
        e.DataRow("研发分机号") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("技术支持信息表").Find("[name] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            msgbox(1)
            Systemready = False
            e.DataRow("研发分机号") = dr("手机号码")
            Systemready = True
            msgbox(e.DataRow("研发分机号"))
        End If
    End If
End If

--  作者:大红袍
--  发布时间:2015/9/21 11:12:00
--  
加入msgbox看弹出什么。是不是你的条件不对,查不到值啊
--  作者:huhu
--  发布时间:2015/9/21 16:05:00
--  
因为是分页加载,find改为了SQLFind,可以了。多谢。这个错误之前我也同样犯过。
dr = DataTables("技术支持信息表").SQLFind("[Name] = \'" & e.NewValue & "\'")