列是无法做筛选的,3楼这种只能是把条件合并到sql里,然后按日期重新统计一次
节点代码:
Dim Filter As String = ""
If e.node.Name <> "显示所有行" Then '要用Name属性,不能用Text属性
Dim d1 As Date
Dim d2 As Date
Dim Year As Integer = e.Node.DataRow("年")
Dim Month As Integer = e.Node.DataRow("月")
Select Case e.Node.Level
Case 0
d1 = New Date(Year, 1, 1) '取得该年的第一天
d2 = New Date(Year, 12, 31) '取得该年的最后一天
Filter = "日期 >= #" & d1 & "# And 日期 <= #" & d2 & "#"
Case 1
d1 = New Date(Year, Month, 1) '取得该月的第一天
d2 = New Date(Year, Month, Date.DaysInMonth(Year, Month)) '取得该月的最后一天
Filter = "日期 >= #" & d1 & "# And 日期 <= #" & d2 & "#"
End Select
End If
Dim sql As String = "select * from (select 入库日期 As 日期,类别,库存编码,产品名称,规格,单位,商标,备注,入库数量,0 as 出库数量 from 入库明细 union select 出库日期 As 日期,类别,库存编码,产品名称,规格,单位,商标,备注,0 as 入库数量,出库数量 from 出库明细 ) as a where " & Filter
Dim bd1 As New CrossTableBuilder("统计表1", sql, "Sale")
Dim dt1 As fxDataSource
bd1.HGroups.AddDef("类别")
bd1.HGroups.AddDef("库存编码")
……后面补齐所有统计的代码按指定的日期重新统计