以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]筛选关联表  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=191994)

--  作者:yqiushyqiush
--  发布时间:2024/5/22 18:52:00
--  [求助]筛选关联表
你好!我想在表A的DataColChanged事件中,用Filter属性筛选出关联表表B,筛选条件是表B的关联表表C某一列(比如m列)所有等于表A当前行这一列的值,请问我的代码应该如何编写?谢谢!假设A、B表用关联一,B、C表用关联二
[此贴子已经被作者于2024/5/22 18:53:04编辑过]

--  作者:有点蓝
--  发布时间:2024/5/23 8:31:00
--  
请举例具体数据说明一下
--  作者:yqiushyqiush
--  发布时间:2024/5/23 10:28:00
--  
我希望在查询参考表(物料名称)列选择一个物料后,在查询参考表.配方汇总表筛选出部分行,筛选规则是在查询参考表.配方汇总表.配方明细表中包含有查询参考表的物料名称列刚刚选定的这行物料,还有,如果查询参考表的物料名称列添加了多行物料,依然可以检索查询参考表.配方汇总表.配方明细表是否包含这些物料,如果有,同样可以在查询参考表.配方汇总表中筛选出来,不知是否阐述清楚,请帮忙指导,谢谢!
图片点击可在新窗口打开查看
[此贴子已经被作者于2024/5/23 10:29:57编辑过]

--  作者:yqiushyqiush
--  发布时间:2024/5/23 10:34:00
--  
在附件中上传了一个比较清楚的示意图,只是不知是否上传成功,帖子中发了一个小图,清晰的大图直接上传会提示过大
--  作者:有点蓝
--  发布时间:2024/5/23 10:35:00
--  
这种要使用模拟关联,参考:http://www.foxtable.com/webhelp/topics/2222.htm

如果看不懂,把这个项目文件发上来我测试一下

--  作者:yqiushyqiush
--  发布时间:2024/5/24 11:13:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20240524110520.png
图片点击可在新窗口打开查看

在查询参考表DataColChanged事件添加如下代码:


If e.DataCol.Name = "物料名称" Then

    DataTables("配方汇总表").StopRedraw \'停止绘制

    DataTables("配方汇总表").ReplaceFor("查询筛选辅助列", Nothing) 

    Dim Filter As String = "[物料名称] = \'" & e.DataRow("物料名称") & "\'"

    Dim dr As DataRow = e.DataRow

    dr("查询筛选辅助列") = "ok" 

    Dim drs As List(Of DataRow)

    Dim pr As DataRow

    drs = DataTables("配方明细表").Select(Filter)

    For Each dr1 As DataRow In drs

        pr = dr1.GetParentrow("配方汇总表")

        pr("查询筛选辅助列") = "ok"

    Next 

    DataTables("配方汇总表").ResumeRedraw \'恢复绘制

End If


目前可以实现功能,但是执行效率比较低,用模拟关联会效率高一些吗?


--  作者:有点蓝
--  发布时间:2024/5/24 11:34:00
--  

If e.DataCol.Name = "物料名称" Then

    DataTables("配方汇总表").StopRedraw \'停止绘制

    DataTables("配方汇总表").ReplaceFor("查询筛选辅助列", Nothing) 

    Dim Filter As String = "[物料名称] = \'" & e.DataRow("物料名称") & "\'"

    Dim dr As DataRow = e.DataRow

    dr("查询筛选辅助列") = "ok" 

DataTables("配方汇总表").ReplaceFor("查询筛选辅助列", "ok","关联列 in (\'" & DataTables("配方明细表").GetComboListString("关联列",Filter).replace("|","\',\'") & "\')"

    DataTables("配方汇总表").ResumeRedraw \'恢复绘制

End If


--  作者:yqiushyqiush
--  发布时间:2024/5/24 13:51:00
--  
关联关系如图,DataTables("配方汇总表").ReplaceFor("查询筛选辅助列", "ok","关联列 in (\'" & DataTables("配方明细表").GetComboListString("关联列",Filter).replace("|","\',\'") & "\')") 这行代码中关联列应如何填写
[此贴子已经被作者于2024/5/24 13:51:22编辑过]

--  作者:yqiushyqiush
--  发布时间:2024/5/24 13:54:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20240524134730.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20240524134708.png
图片点击可在新窗口打开查看
如图

--  作者:yqiushyqiush
--  发布时间:2024/5/24 14:03:00
--  
这样对吗?
DataTables("配方汇总表").ReplaceFor("查询筛选辅助列", "ok", "_Identify in (\'" & DataTables("配方明细表").GetComboListString("主表关联号", Filter).replace("|", "\',\'") & "\')")