Foxtable(狐表)用户栏目专家坐堂 → [求助]年月日目录树多选筛选


  共有4509人关注过本帖树形打印复制链接

主题:[求助]年月日目录树多选筛选

帅哥哟,离线,有人找我吗?
xongyijd
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:245 积分:3629 威望:0 精华:1 注册:2010/5/9 18:45:00
[求助]年月日目录树多选筛选  发帖心情 Post By:2021/3/17 23:21:00 [只看该作者]

用日期列,直接生成年,月,日目录树,因需要多选框筛选功能和统计单据数量,怎样写筛选代码,难道非要在表中增加临时列?

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

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111374 积分:566934 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/18 8:56:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
xongyijd
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:245 积分:3629 威望:0 精华:1 注册:2010/5/9 18:45:00
  发帖心情 Post By:2021/3/21 19:14:00 [只看该作者]

请教版主,按照帮助写了一下,还是无法达到要求,只有单选,不能多选,是怎么回事,实在想不出来哪里错了?
筛选树代码:
Dim du1 As WinForm.Table = e.Form.Controls("Table1")

Dim dt As DataTable
Dim b As New GroupTableBuilder("统计表1",du1.Table.DataTable)
b.Groups.AddDef("来往单位")
b.Groups.AddDef("日期",DateGroupEnum.Year,"年")
b.Groups.AddDef("日期",DateGroupEnum.Month,"月")
b.Groups.AddDef("日期",DateGroupEnum.Day,"日")
b.Totals.AddDef("单据编号",AggregateEnum.Count,"单据数")
dt = b.Build(True)
Dim tv As WinForm.TreeView = e.Form.Controls("TreeView1")
tv.BuildTree(dt,"来往单位|年|月|日")
tv.StopRedraw
For Each nd As WinForm.TreeNode In tv.AllNodes
    Dim Product As String = nd.DataRow("来往单位")
    Dim Year As Integer = nd.DataRow("年")
    Dim Month As Integer = nd.DataRow("月")
    Dim  Day As Integer = nd.DataRow("日")
    Select Case nd.Level
        Case 0
            nd.Text = nd.text & "单据(" & dt.Compute("Sum(单据数)","来往单位 = '" & Product & "'") & "条)"
        Case 1
            nd.Text = nd.text & "年(" & dt.Compute("Sum(单据数)","来往单位 = '" & Product & "'And 年 = " & Year) & "条)"
        Case 2
            nd.Text = nd.text & "月(" & dt.Compute("Sum(单据数)","来往单位 = '" & Product & "'And 年 = " & Year & " And 月 = " & Month) & "条)"
        Case 3
            nd.Text = nd.text & "日(" & dt.Compute("Sum(单据数)","来往单位 = '" & Product & "'And 年 = " & Year & " And 月 = " & Month & " And 日 = " & Day) & "条)"
    End Select
Next
tv.Nodes.Insert("显示所有行","显示所有条件行(" & dt.Compute("Sum(单据数)") & "条)",0)
tv.ResumeRedraw
筛选代码:
Dim flt As String
Dim d1,d2,d3,d4,d5 As Date
Dim Year As Integer = e.Node.DataRow("年")
Dim Month As Integer = e.Node.DataRow("月")
Dim Day As Integer = e.Node.DataRow("日")
d1 = New Date(Year,1,1) '取得该年的第一天
d2 = new Date(Year,12,31) '取得该年的最后一天
d3 = New Date(Year, Month, 1) '取得该月的第一天
d4 = new Date(Year, Month, Date.DaysInMonth(Year,Month)) '取得该月的最后一天
d5 = New Date(Year, Month,Day)
For Each nd As WinForm.TreeNode In e.Sender.AllNodes
    If nd.Checked = True Then
        If flt > "" Then
            flt = flt & " Or "
        End If
        If nd.Level = 0 Then
            flt = flt & "(来往单位 = '" & nd.Name & "')"
        End If
        If  nd.Level = 1 Then
            flt = flt & "(来往单位 = '" & nd.ParentNode.Name & "'And 日期 >= #" & d1 & "# And 日期 <= #" & d2 & "#)"
        End If
        If  nd.Level = 2Then
            flt = flt & "(来往单位 = '" & nd.ParentNode.ParentNode.Name & "'And  日期 >= #" & d3 & "# And 日期 <= #" & d4 & "#)"
        End If
        If  nd.Level = 3 Then
            flt = flt & "(来往单位 = '" & nd.ParentNode.ParentNode.ParentNode.Name & "'And 日期 = #" & d5 & "#)"
        End If
    End If

e.Form.Controls("Table1").Table.Filter = flt
Next
MessageBox.Show(flt)

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111374 积分:566934 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/21 22:10:00 [只看该作者]

MessageBox.Show(flt)显示什么条件?

 回到顶部
帅哥哟,离线,有人找我吗?
xongyijd
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:245 积分:3629 威望:0 精华:1 注册:2010/5/9 18:45:00
  发帖心情 Post By:2021/3/21 22:32:00 [只看该作者]

多选时条件表达式显示都是最后选择框的一样日期,就好像没有遍历多选,只有单选

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

[此贴子已经被作者于2021/3/21 22:35:20编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111374 积分:566934 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/21 22:38:00 [只看该作者]

筛选代码:
Dim flt As String
For Each nd As WinForm.TreeNode In e.Sender.AllNodes

Dim d1,d2,d3,d4,d5 As Date
Dim Year As Integer = nd.DataRow("年")
Dim Month As Integer = nd.DataRow("月")
Dim Day As Integer = nd.DataRow("日")
d1 = New Date(Year,1,1) '取得该年的第一天
d2 = new Date(Year,12,31) '取得该年的最后一天
d3 = New Date(Year, Month, 1) '取得该月的第一天
d4 = new Date(Year, Month, Date.DaysInMonth(Year,Month)) '取得该月的最后一天
d5 = New Date(Year, Month,Day)
    If nd.Checked = True Then
        If flt > "" Then
            flt = flt & " Or "
        End If
        If nd.Level = 0 Then
            flt = flt & "(来往单位 = '" & nd.Name & "')"
        elseIf  nd.Level = 1 Then
            flt = flt & "(来往单位 = '" & nd.ParentNode.Name & "'And 日期 >= #" & d1 & "# And 日期 <= #" & d2 & "#)"
        elseIf  nd.Level = 2Then
            flt = flt & "(来往单位 = '" & nd.ParentNode.ParentNode.Name & "'And  日期 >= #" & d3 & "# And 日期 <= #" & d4 & "#)"
        elseIf  nd.Level = 3 Then
            flt = flt & "(来往单位 = '" & nd.ParentNode.ParentNode.ParentNode.Name & "'And 日期 = #" & d5 & "#)"
        End If
    End If

e.Form.Controls("Table1").Table.Filter = flt
Next
MessageBox.Show(flt)

 回到顶部
帅哥哟,离线,有人找我吗?
xongyijd
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:245 积分:3629 威望:0 精华:1 注册:2010/5/9 18:45:00
  发帖心情 Post By:2021/3/21 22:55:00 [只看该作者]

遍历放到前面也是一样的问题,遍历选择框值我也看了,没有问题,合并条件后就是不行,我做个例子帮助我看看吧,弄了好几天了,还是弄不好


 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111374 积分:566934 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/21 23:01:00 [只看该作者]

e.Form.Controls("Table1").Table.Filter = flt放到最后,遍历之外

重新弹出筛选条件看看

 回到顶部
帅哥哟,离线,有人找我吗?
xongyijd
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:245 积分:3629 威望:0 精华:1 注册:2010/5/9 18:45:00
  发帖心情 Post By:2021/3/21 23:15:00 [只看该作者]

不行,我做了一个例子发你看看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:筛选测试项目.foxdb



 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111374 积分:566934 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/21 23:28:00 [只看该作者]

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


 回到顶部
总数 12 1 2 下一页