以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请教DataColChanged:事件  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=122588)

--  作者:zhangchi96
--  发布时间:2018/7/28 16:55:00
--  请教DataColChanged:事件
 

一、窗体:校车管理窗体

1、

插入表:校车基本信息之驾驶员

绑定表:网络校车基本信息表

作为副本:true

筛选:Tables("校车管理窗体_校车基本信息之驾驶员").Filter = " 统计项目 = \'驾驶人员\' "

单位名称   统计项目 驾驶员_姓名 驾驶员_身份证号          驾驶员_状态

单位01     驾驶人员  驾驶员1    321671197610108191    在岗         

单位02     驾驶人员  驾驶员2    321671197610108192    在岗         

单位03     驾驶人员  驾驶员3    321671197610108193    离岗         


2、

插入表:校车基本信息之线路

绑定表:网络校车基本信息表

作为副本:true

筛选:Tables("校车管理窗体_校车基本信息之线路").Filter = " 统计项目 = \'线路配置\' "

单位名称  线路  统计项目 驾驶员_姓名 驾驶员_身份证号                车牌号   乘管员

单位01     1        线路配置    驾驶员1        321671197610108191                           

单位02     2        线路配置    驾驶员2        321671197610108192                          

单位03     3        线路配置    驾驶员3        321671197610108193                         


3、

【设置下拉菜单】按钮代码:

\'--设置下拉菜单\'

Dim dmp1 As New TableDataMap

dmp1.DataTable = "网络校车基本信息表" \'指定数据来源表

dmp1.ValueCol = "驾驶员_身份证号"   \'指定取值列

dmp1.DisplayCol = "驾驶员_身份证号" \'指定显示列

dmp1.ListCols = "驾驶员_姓名,驾驶员_身份证号"  \'指定下拉列表时显示哪些列的数据

dmp1.Sort = "驾驶员_姓名" \'指定排序方式

 Tables("校车管理窗体_校车基本信息之线路").Cols("驾驶员_身份证号").DataMap = dmp1.CreateDataMap()

 

 

二、表事件  【网络校车基本信息表】的表事件DataColChanged:

 

If Tables("网络校车基本信息表").Rows.count > 0 Then \'求行数

    Dim frm As WinForm.Form

    frm = Forms.ActiveForm  

    If frm IsNot Nothing Then

        If frm.Name = "校车管理窗体" Then  

            If CurrentTable.DataTable.Name = "网络校车基本信息表" Then

                If e.DataCol.Name = "驾驶员_身份证号" And e.DataRow("统计项目") = "驾驶人员" Then

                    For Each dr5 As DataRow In DataTables("网络校车基本信息表").Select(" 统计项目 <>  \'驾驶人员\' ","")

                        If dr5("驾驶员_身份证号") = e.oldvalue Then

                            dr5("驾驶员_身份证号") = e.newvalue

                        End If

                    Next

                End If

               

               

                \'-- 在驾驶员从【在岗】改为【离岗】后,【统计项目】符合线路配置各行中,该驾驶员的身份证号全部清空

                If e.DataCol.Name = "车辆_状态" And e.DataRow("统计项目") = "驾驶人员" Then                     

                    If e.NewValue <>  "运行" Then

                        Dim 身份证号 As String = e.DataRow("驾驶员_身份证号")

                         Dim dr5 As DataRow = DataTables("网络校车基本信息表").Find("  统计项目 <>  \'驾驶人员\' and 驾驶员_身份证号 = \'"& 身份证号 &"\'")

                                dr5("驾驶员_身份证号") = ""

                    End If

                End If

 

                Dim 设置下拉菜单 As WinForm.Button = Forms("校车管理窗体").Controls("设置下拉菜单")

                设置下拉菜单.PerformClick()

            End If

        End If

    End If

End If

 

 

 

黄色的部分代码在执行时,没有起作用,请老师指点一二

[此贴子已经被作者于2018/7/28 16:56:22编辑过]

--  作者:有点蓝
--  发布时间:2018/7/28 18:38:00
--  
If Tables("网络校车基本信息表").Rows.count > 0 Then \'求行数
    Dim frm As WinForm.Form
    frm = Forms.ActiveForm
    If frm IsNot Nothing Then
        If frm.Name = "校车管理窗体" Then
            If CurrentTable.DataTable.Name = "网络校车基本信息表" Then
                If e.DataCol.Name = "驾驶员_身份证号" And e.DataRow("统计项目") = "驾驶人员" Then
                    For Each dr5 As DataRow In DataTables("网络校车基本信息表").Select(" 统计项目 <>  \'驾驶人员\' ","")
                        If dr5("驾驶员_身份证号") = e.oldvalue Then
                            dr5("驾驶员_身份证号") = e.newvalue
                        End If
                    Next
                End If
                msgbox(e.DataRow("统计项目")) \'能不能弹出来
                
                \'-- 在驾驶员从【在岗】改为【离岗】后,【统计项目】符合线路配置各行中,该驾驶员的身份证号全部清空
                If e.DataCol.Name = "车辆_状态" And e.DataRow("统计项目") = "驾驶人员" Then
                    msgbox(e.NewValue)\'弹出什么值
                    If e.NewValue <>  "运行" Then
                        Dim 身份证号 As String = e.DataRow("驾驶员_身份证号")
                        Dim dr5 As DataRow = DataTables("网络校车基本信息表").Find("  统计项目 <>  \'驾驶人员\' and 驾驶员_身份证号 = \'" & 身份证号 & "\'")
                        dr5("驾驶员_身份证号") = ""
                    End If
                End If
                
                Dim 设置下拉菜单 As WinForm.Button = Forms("校车管理窗体").Controls("设置下拉菜单")
                设置下拉菜单.PerformClick()
            End If
        End If
    End If
End If

--  作者:zhangchi96
--  发布时间:2018/7/28 23:52:00
--  

老师,这样改了一下,能顺利执行了


If Tables("网络校车基本信息表").Rows.count > 0 Then \'求行数
    Dim frm As WinForm.Form  \'定义一个窗体\'
    frm = Forms.ActiveForm   \'活动窗口的名字表示方法就是:frm.Name
    If frm IsNot Nothing Then
        If frm.Name = "校车管理窗体" Then   \'设置只有在这个窗体中才起作用
            If CurrentTable.DataTable.Name = "网络校车基本信息表" Then \'如果选择的主表是【...】
               If e.DataCol.Name = "驾驶员_身份证号" And e.DataRow("统计项目") = "驾驶人员" Then \'如果是....列的内容变动
                    For Each dr5 As DataRow In DataTables("网络校车基本信息表").Select(" 统计项目 <>  \'驾驶人员\' ","")
                        If dr5("驾驶员_身份证号") = e.oldvalue Then
                            dr5("驾驶员_身份证号") = e.newvalue
                        End If
                    Next
                End If
               If e.DataCol.Name = "驾驶员_状态" And e.DataRow("统计项目") = "驾驶人员" Then \'如果是....列的内容变动        \'当前列写错了,改了一下
                    If e.NewValue <>  "运行" Then \'而且变动后的值是...
                        Dim 身份证号 As String = e.DataRow("驾驶员_身份证号")

                        \'如果不改为以下遍历语句,则清空驾驶员身份证号的就只会是第一条符合条件的记录,而不是所有记录
                        For Each dr5 As DataRow In DataTables("网络校车基本信息表").Select(" 统计项目 <>  \'驾驶人员\' and 驾驶员_身份证号 = \'"& 身份证号 &"\' ","")
                             dr5("驾驶员_身份证号") = ""
                        Next
                    End If
                End If
                Dim 设置下拉菜单 As WinForm.Button = Forms("校车管理窗体").Controls("设置下拉菜单")   \'执行按钮【....】的代码
                设置下拉菜单.PerformClick()
            End If
        End If
    End If
End If