Foxtable(狐表)用户栏目专家坐堂 → 筛选树中的日期列如何处理成年月显示?


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

主题:筛选树中的日期列如何处理成年月显示?

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
筛选树中的日期列如何处理成年月显示?  发帖心情 Post By:2013/8/8 1:45:00 [显示全部帖子]

如下图,想实现象系统里的加载树那样的功能,如果是日期列根据需要显示。要如何实现?


图片点击可在新窗口打开查看此主题相关图片如下:筛选树中的日期处理.jpg
图片点击可在新窗口打开查看

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


请教复选组合框中的代码要如何修改才可以实现?谢谢!

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/8/8 10:09:00 [显示全部帖子]

现在主要的问题是我的表都是窗口中动态FIll生成的。想用如下的sQL语句提取当前表生成一个临时表来处理一下就很简单了。但因为后台数据库中没有真实存在这个fill的表,sql语句都无法用。所以不知道怎么做了?

Dim cmd As New SQLCommand
Dim
 dt As DataTable
cmd
.CommandText = "SELECT DISTINCT Year(日期) As , Month(日期) As 产品 From {订单}"
dt
 = cmd.ExecuteReader()
Dim
 trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv
.BuildTree(dt, "年|月|产品")

如将上面红色的订单替换为窗口表“窗口1_table1"就提示出错了。直接在当前表中增加表达式列又会修改当前表,我只要筛选而已,不想改动当前表?

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/8/8 10:49:00 [显示全部帖子]

狐爸,那是否这种筛选只适合从单个表取数的情况,如果当前表也是从几个表查询fill的数据,这个表就不知用哪个了?


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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/8/8 13:28:00 [显示全部帖子]

还是不可以,如果SQL语句中直接用后台那个表,生成的目录树是使用的整个后台数据表的数据,而我只想用当前表(是动态加载的数据只有一部份而已)中的数据生成目录树。
如果直接用当前表来生成目录树的话,还要增加表达式列等来存放日期转化后的数据,但当前表的结构又不能修改。

除了上面的sql语句外有没有方法直接将当前显示的表再复制生成一个临时表?





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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/8/8 16:47:00 [显示全部帖子]

顶上去。

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/8/17 10:30:00 [显示全部帖子]

谢谢有点甜,这个确实弄得头晕。我也采用增加临时列的方式,每次控制只能选择一个日期列,多个就不知道怎么弄了。因为增加后会导致表改变,如果切换到其他表会提示保存,所以只好在最后生成目录树后又将表还原了。

Dim Y As WinForm.RadioButton = e.Form.Controls("RbtF_Y")
Dim YM As WinForm.RadioButton = e.Form.Controls("RbtF_YM")
Dim tr As WinForm.TreeView = e.Form.Controls("Tr_Flt")

Dim s As String = e.Sender.Text
If s = "" OrElse s = "先选择分组列" OrElse Mtb Is Nothing Then
    Return
End If

Dim t As Integer
Dim dt As DataTable
Dim dr As DataRow
Dim dc As DataCol
Dim ColS As String

dt = CurrentTable.DataTable

tr.StopRedraw()
tr.Nodes.Clear

'根据所选日期列类型替换分组列的值以便生成所需要的日期目录树
Dim Values() As String
Values = s.split("|")
For i As Integer = 0 To Values.Length - 1
    If dt.dataCols(Values(i)).IsDate Then
        ColS = Values(i)
        t = t + 1
        If t > 1 Then
            e.Sender.Text = ""
            MessageBox.Show("一次只能选择一个日期列!","提示")
            Return
        End If
        If dt.dataCols.Contains(Values(i) & "Y") = False Then
            dt.dataCols.Add(Values(i) & "Y",Gettype(Integer))
            dt.dataCols.Add(Values(i) & "M",Gettype(Integer))
            CurrentTable.Cols(Values(i) & "Y").Visible = False
            CurrentTable.Cols(Values(i) & "M").Visible = False
            For Each dr In dt.DataRows
                dr(Values(i) & "Y") = Year(dr(Values(i)))
                dr(Values(i) & "M") = Month(dr(Values(i)))
            Next
        End If
        If Y.checked = True Then
            s = s.Replace(ColS,ColS & "Y")
        ElseIf YM.checked = True Then
            s = s.Replace(ColS,ColS & "Y|" & ColS & "M")
        End If
    End If
Next

tr.BuildTree(dt,s)

tr.ResumeRedraw()
If tr.AllNodes.Count > 0 Then
    tr.Nodes.Insert("显示所有",0)
End If
tr.Select()
dt.RejectChanges()

 回到顶部