以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  复杂的筛选功能  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=106385)

--  作者:yangwenghd
--  发布时间:2017/9/7 17:13:00
--  复杂的筛选功能
如果项目流程相同的行没有一个已完成,这显示项目名称相同的所有行,然后在筛选出日期列有日期的行
相当于筛选出 项目流程 列内,相同的行 没有已完成 再对应项目名称所有的行,再筛选出 计划_开始日期列有日期的行。
换的理解就是,筛选出项目流程相同的是否有一行的状态列有已完成,把没有意见完成的相同项目名称相同的行,且日期列有日期的行筛选出来。
比如 项目流程列有很多相同的,如:项目流程a 项目流程a 项目流程a 项目流程b 项目流程b 项目流程b 项目流程c 项目流程c 项目流程c 先检查这些项目流程列 相同的再状态列有没 已完成的,比如项目流程a 相同的行 再状态列有一行是已经完成就不筛选,(或者不管)继续看项目流程b,如果项目流程b相同在状态列没有一个已完成,那么筛选出项目流程行所有相同的 且日期列有日期的。


其实这个确实很麻烦,是想筛选出项目名称下的项目流程是否没个都已经完成,如果完成不管。如果项目流程相同的没有一个已完成,则显示出同行 项目名称相同的所有行,再这里已经筛选的里面筛选出 计划_开始日期列 有日期的行,非常的麻烦,不知道能不能实现。

以这个为例,项目A的流程2 流程3在状态别都有已完成,就不管他,
再看项目B的流程1和流程2,流程1的状态有已完成,但是流程2的状态列没有已完成,则筛选出项目B所有在计划_开始有日期的行,可以这样筛选吗?后面的都这样筛选。确实太复杂了,感谢 感谢 


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

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:筛选.table

--  作者:有点甜
--  发布时间:2017/9/7 19:50:00
--  
Dim t As Table = Tables("计划表")
Dim str As String = t.DataTable.GetComboListString("项目名称", "状态 = \'办理中\'").replace("|", "\',\'")
t.filter = "项目名称 in (\'" & str & "\') and 计划_开始日期 is not null"

--  作者:yangwenghd
--  发布时间:2017/9/8 11:18:00
--  
可以筛选出 项目流程 列 相同的行的状态列没有已完成的行吗?
比如项目流程列 所有流程2有已完成就不显示,如果没有就显示 所有的流程2 相同的行,感谢 感谢 
[此贴子已经被作者于2017/9/8 11:18:19编辑过]

--  作者:有点甜
--  发布时间:2017/9/8 13:37:00
--  
Dim t As Table = Tables("计划表")
Dim ls  = t.DataTable.GetValues("项目名称|项目流程", "状态 = \'办理中\'")
Dim str As String = "\'\',"
For Each ary() As String In ls
    str &= "\'" & ary(0) + ary(1) & "\',"
Next
t.filter = "项目名称+项目流程 in (" & str.trim(",") & ")"

--  作者:yangwenghd
--  发布时间:2017/9/8 14:37:00
--  
为什么还是排除不了 状态列 对于已完成,同时和 项目流程内容相同的行呢, 感谢 感谢 

Dim t As Table = Tables("计划表")
Dim ls  = t.DataTable.GetValues("项目名称|项目流程", "状态 <> \'已完成\'")
Dim str As String = "\'\',"
For Each ary() As String In ls
    str &= "\'" & ary(0) + ary(1) & "\',"
Next
t.filter = "项目名称+项目流程 in (" & str.trim(",") & ")"


--  作者:有点甜
--  发布时间:2017/9/8 14:50:00
--  
 我测试代码没问题。请截图说明需要的效果。
--  作者:yangwenghd
--  发布时间:2017/9/9 0:24:00
--  
  其实思路很简单,检查项目流程是不是每个都完成了,完成了就不筛选,如果没有完成,就要筛选出这个项目流程的整个项目名称,在这个的基础上筛选有日期的。
就好比A(项目名称) 下面有123(项目流程),如果不管123 的任何有一个没有完成(已完成),都要显示出整个 项目名称,这个的基础上筛选出有时间的行。

所以 第一个方框有已完成(项目流程相同的行)不管(不筛选),第二个框相同,三个也是,项目流程相同的都有 已完成,
但是 第四框(项目流程相同的行)没有已经 已完成 ,那么 显示出项目名称相同的,再这个的基础上显示有时间的行,
那么 没有 已完成的框  是 4、5、6、7的框没有已完成,他们分别相同的 项目名称列是 项目B 课名A  ,再在已经筛选了的筛选有时间的 行
所以要筛选的就是第8、11、14、19、23、
虽然8行的方框有已完成,但是 项目B 流程2 没有完成,就要把相同的项目名称一起筛选出,在筛选有时间的行。


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

[此贴子已经被作者于2017/9/9 0:25:14编辑过]

--  作者:有点蓝
--  发布时间:2017/9/9 8:49:00
--  
Dim t As Table = Tables("计划表")
Dim ls  = t.DataTable.GetValues("项目名称|项目流程", "状态 = \'已完成\'")
Dim str As String = "\'\',"
For Each ary() As String In ls
    str &= "\'" & ary(0) + ary(1) & "\',"
Next
t.filter = "计划_开始日期 is not null and 项目名称+项目流程 not in (" & str.trim(",") & ")"
--  作者:yangwenghd
--  发布时间:2017/9/9 12:30:00
--  
这个是什么原因呀?感谢感谢  

.NET Framework 版本:2.0.50727.8669
Foxtable 版本:2017.6.12.1
错误所在事件:
详细错误信息:
无法在 System.Boolean 和 System.String 上执行“And”操作。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:筛选.table



--  作者:有点蓝
--  发布时间:2017/9/9 14:17:00
--  
Dim t As Table = Tables("计划表")
Dim ls  = t.DataTable.GetValues("项目名称|项目流程", "状态 = \'已完成\'")
Dim str As String = "\'\',"
For Each ary() As String In ls
    str &= "\'" & ary(0) + ary(1) & "\',"
Next
t.filter = "计划_开始日期 is not null and (项目名称+项目流程) not in (" & str.trim(",") & ")"
[此贴子已经被作者于2017/9/9 14:18:53编辑过]