Foxtable(狐表)用户栏目专家坐堂 → 字符如何格式化成日期


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

主题:字符如何格式化成日期

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


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
字符如何格式化成日期  发帖心情 Post By:2023/12/15 11:35:00 [显示全部帖子]

TextBox文本框,在文本框中录入年度,如何在代码里将这个文本格式化成日期里的年度,并指定月和日和其他日期列作比较,excel里有这样的代码可以做到,狐表里有吗?帮助里都看过了,跟我说的情况不一样,有的话,请大神们给个可行的代码
[此贴子已经被作者于2023/12/15 11:36:05编辑过]

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


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By:2023/12/15 12:59:00 [显示全部帖子]

查询按钮代码:
Dim d1 As Date = CDate(e.Form.controls("TextBox1").text & "-1-1")
Dim d2 As Date = CDate(e.Form.controls("TextBox1").text & "-12-31")
Dim dt As DataTable
Dim b As New SQLGroupTableBuilder("统计表1", "EI")
b.Groups.AddDef("人员类别")
b.Groups.AddDef("人员状态")
b.Totals.AddDef("_Identify", AggregateEnum.Count, "人数") 
dt = b.Build()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "人员类别|人员状态")
trv.StopRedraw
For Each nd As WinForm.TreeNode In trv.AllNodes
    Dim lb1 As String = nd.DataRow("人员类别")
    Dim zt As String = nd.DataRow("人员状态")
    Select Case nd.Level
        Case 0
            nd.Text = nd.text & "(" & dt.Compute("Sum(人数)", "人员类别 = '" & lb1 & "'") & "人)"
        Case 1
            nd.Text = nd.text & "(" & dt.Compute("Sum(人数)", "人员类别 = '" & lb1 & "' And 人员状态 = '" & zt & "'") & "人)"
        Case 2
            nd.Text = nd.text & "(" & nd.DataRow("人数") & ")"
    End Select
Next
trv.Nodes.Insert("加载所有行", "加载所有行(" & dt.Compute("Sum(人数)") & "人)", 0)
trv.ResumeRedraw
如何把满足条件的人进行统计,条件怎么加进代码里,TextBox里输入年度,然后,根据人员状态、进入单位日期、离开单位日期来进行统计,因为不同状态的人需满足的条件不同,比如,在职或在聘的,只需要判断其进入单位日期大于等于d2即可,如果是退休、解聘、调出的,则要同时满足进入单位日期大于等于d2且离开单位日期小于等于d1。
输出的目录树结构还是以下这种结构
图片点击可在新窗口打开查看

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


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By:2023/12/15 14:42:00 [显示全部帖子]

蓝老师,代码运行没有出错,但是筛选不出想要的结果,目录树显示也不正确,具体问题如下:
1、点击查询的结果和点击加载所有行,ListView还是显示所有的人员。
2、人员类别有三类,但是目录树只有一类在职人员。确定当年不止在职这一类人员存在。如下图:
图片点击可在新窗口打开查看
3、点击职员节点,ListView列出的是所有的职员,而不是只列出符合条件的职员。
职员节点下的显示倒是正常的。点击后,ListView的结果也正常
还请蓝老师再指导一下,下面是我现在的代码:
Dim d1 As Date = CDate(e.Form.controls("TextBox1").text & "-1-1")
Dim d2 As Date = CDate(e.Form.controls("TextBox1").text & "-12-31")
Dim dt As DataTable
Dim b As New SQLGroupTableBuilder("统计表1", "EI")
b.Groups.AddDef("人员类别")
b.Groups.AddDef("人员状态")
b.Totals.AddDef("_Identify", AggregateEnum.Count, "人数") 
b.filter = "离开单位日期>=#" & d1 & "# and 进入单位日期<=#" & d2 & "#"
dt = b.Build()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "人员类别|人员状态")
trv.StopRedraw
For Each nd As WinForm.TreeNode In trv.AllNodes
    Dim lb1 As String = nd.DataRow("人员类别")
    Dim zt As String = nd.DataRow("人员状态")
    Select Case nd.Level
        Case 0
            nd.Text = nd.text & "(" & dt.Compute("Sum(人数)", "人员类别 = '" & lb1 & "'") & "人)"
        Case 1
            nd.Text = nd.text & "(" & dt.Compute("Sum(人数)", "人员类别 = '" & lb1 & "' And 人员状态 = '" & zt & "'") & "人)"
        Case 2
            nd.Text = nd.text & "(" & nd.DataRow("人数") & ")"
    End Select
Next
trv.Nodes.Insert("加载所有行", "加载所有行(" & dt.Compute("Sum(人数)") & "人)", 0)
trv.ResumeRedraw
Dim lvw As WinForm.ListView
lvw = e.Form.CreateControl("ListView1", ControlTypeEnum.ListView)
lvw.StopRedraw()
lvw.Groups.Clear()
lvw.Columns.Clear()
lvw.Rows.Clear()
lvw.Images.Clear()
lvw.Dock = System.Windows.Forms.DockStyle.Fill
lvw.View = ViewMode.Details
lvw.TitleSize = New Size(130, 80)
lvw.GridLines = True
lvw.AllowDrag = True
lvw.Images.AddImage("Man", "Man.ico", "Man48.ico")
lvw.Images.AddImage("Woman", "Woman.ico", "Woman48.ico")
e.Form.Controls("SplitContainer1").Panel2.AddControl(lvw)
Dim cls() As String = {"姓名", "人员类别", "进入单位日期", "离开单位日期", "人员状态"}
For i As Integer = 0 To cls.Length - 1 
    Dim c As WinForm.ListViewColumn = lvw.Columns.Add() 
    c.Name = cls(i) 
    c.Text = cls(i)
    c.TextAlign = HorizontalAlignment.Center
Next
For Each lb As String In DataTables("EI").GetValues("人员类别")
    Dim grp As WinForm.ListViewGroup = lvw.Groups.Add()
    grp.Name = lb
    grp.Text = lb
Next
For Each dr As DataRow In DataTables("EI").DataRows
    Dim r As WinForm.ListViewRow = lvw.Rows.Add() 
    r.Group = dr("人员类别")
    For Each cl As String In cls
        r(cl) = dr(cl) 
    Next
    If dr("性别") = "男" Then
        r.ImageKey = "Man"
    Else
        r.ImageKey = "Woman"
    End If
    r.Tag = dr
Next
For Each c As WinForm.ListViewColumn In lvw.Columns
    c.AutoResize
Next 
lvw.ShowGroups = False
lvw.ResumeRedraw()
[此贴子已经被作者于2023/12/15 14:44:33编辑过]

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


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By:2023/12/15 15:29:00 [显示全部帖子]

已上传,点击查询后退休节点的数据也不对
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目.rar

[此贴子已经被作者于2023/12/15 15:39:07编辑过]

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


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By:2023/12/15 15:56:00 [显示全部帖子]

人员管理窗口,左下那个人员查询图片点击可在新窗口打开查看图片点击可在新窗口打开查看

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


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By:2023/12/15 16:16:00 [显示全部帖子]

查询后,点一下每个节点,就可以看到目录树里的数据和右边的ListView里的的数据对不上了

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


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By:2023/12/15 16:18:00 [显示全部帖子]

图片点击可在新窗口打开查看比如这张图,点击的明明是职员,显示的是7个人,但是ListView那边的数据却不是筛选出来的那7个人

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


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By:2023/12/15 16:40:00 [显示全部帖子]

不行,还是有问题,而且返回去点击人员查询之后再点节点也会出问题
[此贴子已经被作者于2023/12/15 16:40:11编辑过]

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


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By:2023/12/15 16:45:00 [显示全部帖子]

图片点击可在新窗口打开查看这个是我用excel做的筛选,出来的结果就包含了所有的人员类别,所以b.filter = "离开单位日期>=#" & d1 & "# and 进入单位日期<=#" & d2 & "#"不能这样写,因为在职和在聘的是没有离开单位日期数据的

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


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By:2023/12/15 17:07:00 [显示全部帖子]

Dim d1 As Date = CDate(e.Form.controls("TextBox1").text & "-1-1")
Dim d2 As Date = CDate(e.Form.controls("TextBox1").text & "-12-31")
在职或在聘的,只要其进入单位日期大于等于d2就筛选出来,如果是退休、解聘、调出的,则要根据其进入单位日期大于等于d2且离开单位日期小于等于d1来筛选出来

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