以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  帮助查看一下代码动态合成表达式  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=157483)

--  作者:HANZHIGANG
--  发布时间:2020/10/17 22:23:00
--  帮助查看一下代码动态合成表达式
就是为了实现双击Tables("调度管理_table1")当前行后,找出DataTables("运单管理")后台数据中对应行号行的调度单号、车牌号等列替换为Tables("调度管理")当前行对应列的信息。其中Filter = "cr = \'" DataTables("运单管理").SQLFind("[_Identify] = " & pr("_Identify") & ") ""动态表达式不会写了,请老师指导

全部代码如下,如有其他不合理的地方,请老师一并指出、指导

Dim dr As Row = Tables("调度管理").Current
Dim pr As Row = Tables("调度管理_table1").Current
Dim cr As DataRow
Dim Filter As String
Filter = "cr = \'" DataTables("运单管理").SQLFind("[_Identify] = " & pr("_Identify") & ") ""(这句不会写了,老师指导一下)
If dr IsNot Nothing
    If dr.IsNull("车牌号")  OrElse dr.IsNull("驾驶员") OrElse dr.IsNull("调度动态") OrElse dr.IsNull("实际发车日期") Then
        MessageBox.Show("蓝色字体不能为空,请填写完整后再选运单!")
    Else
        If pr("调度选定") = False Then
            DataTables("运单管理").SQLReplaceFor("调度选定", 1,Filter)
            DataTables("运单管理").SQLReplaceFor("调度单号", dr("调度单号"),Filter)
            DataTables("运单管理").SQLReplaceFor("车牌号", dr("车牌号"),Filter)
            DataTables("运单管理").SQLReplaceFor("驾驶员", dr("驾驶员"),Filter)
            DataTables("运单管理").SQLReplaceFor("承运单位", dr("承运单位"),Filter)
            DataTables("运单管理").SQLReplaceFor("车辆类型", dr("车辆类型"),Filter)
            DataTables("运单管理").SQLReplaceFor("调度日期", dr("调度日期"),Filter)
            DataTables("运单管理").SQLReplaceFor("实际发车日期", dr("实际发车日期"),Filter)          
            pr.Remove()
            Tables("调度管理_table2").DataTable.LoadFilter = "调度单号 = \'" & dr("调度单号")  & "\'"
            Tables("调度管理_table2").DataTable.load()
            Tables("调度管理").DataTable.DataCols("调度单号").RaiseDataColChanged((Tables("调度管理").Current.DataRow))
        Else
            MessageBox.Show("此运单已被其他调度单选定,无法进行二次调度,请核实后再进行选择!")
        End If
    End If
End If


[此贴子已经被作者于2020/10/18 18:30:52编辑过]

--  作者:wei0769
--  发布时间:2020/10/18 8:01:00
--  

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

--  作者:HANZHIGANG
--  发布时间:2020/10/18 10:00:00
--  
没弄明白啊,方便的话帮贴代码吧
--  作者:有点蓝
--  发布时间:2020/10/18 21:24:00
--  
几个问题
1、凡是使用current的地方都要先判断一下是否空值:http://www.foxtable.com/webhelp/topics/0445.htm,比如表格没有数据的时候,current就是空值
2、强烈建议不要使用_Identify做业务关联。这个是主键,不是行号,这个值基本是不可控的。行号仅在界面有意义,数据库里是没有行号这种概念的。建议使用单号,编号之类的数据查询
仅限在同一个表查询数据才有可能使用_Identify准确查询到数据。

--  作者:HANZHIGANG
--  发布时间:2020/10/19 8:44:00
--  
老师,原来没有用行号进行处理,是以调度单号进行的关联
但因为跨表取值后,后台的数据不能时时更新,用RaiseDataColChanged的方法也得是加载后的数据才行,就想用这个办法
那要是想对后台的数据时时更新,老师指导一下,用什么方法

--  作者:有点酸
--  发布时间:2020/10/19 9:03:00
--  
看不懂你的设计逻辑,不过两个不同表的_Identify,要相等,显示不可能。
你应该根据调度单号这种唯一的编号来设计。
关于合成表达式,,参考: