Foxtable(狐表)用户栏目专家坐堂 → 又请教时间转换问题


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

主题:又请教时间转换问题

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


加好友 发短信
等级:五尾狐 帖子:1174 积分:8782 威望:0 精华:0 注册:2012/4/18 16:28:00
又请教时间转换问题  发帖心情 Post By:2015/12/10 15:35:00 [只看该作者]

大红袍老师,我设计了员工考勤的查询表窗,窗口中的TABLE1的时间格式自己已设置好,能正常显示,根据需要有时要打印查询某员工的考勤,我用专业报表进行设计,我尝试做了几个代码对不能正常显示上班时间为08:30,报表总显示1900/1/1. 不知是否我写的代码有误。

1. ACCESS的上班时间属性为短时间设置
2. 表列的上班时间属性为Time
3.电脑上的短时间是H:mm

         Case "上班时间"
            For r As Integer = 0 To tb.Rows.Count -1 '开始填入该列内容
                rt.Cells(r + 1, c).Text = tb(r,c).PadLeft("0") & ":" & Format((tb(r,c)).PadLeft("0"))
                rt.Rows(0).Height = 7 '设置行高
            Next

     Case "上班时间"
            For r As Integer = 0 To tb.Rows.Count -1 '开始填入该列内容
                rt.Cells(r + 1, c).Text = Format(tb(r,c), "H:mm")
                rt.Rows(0).Height = 7 '设置行高
            Next

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/10 15:40:00 [只看该作者]

rt.Cells(r + 1, c).Text = Format(tb(r,c), "HH:mm")

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


加好友 发短信
等级:五尾狐 帖子:1174 积分:8782 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2015/12/10 15:43:00 [只看该作者]

之前,HH:mm我也试过,还是显示1900/1/1

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/10 15:47:00 [只看该作者]

不可能,上传例子。

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


加好友 发短信
等级:五尾狐 帖子:1174 积分:8782 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2015/12/10 16:13:00 [只看该作者]

请老师看看!!谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.zip



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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/10 16:19:00 [只看该作者]

汗,你例子什么也没有啊,做好窗口,贴出代码。

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


加好友 发短信
等级:五尾狐 帖子:1174 积分:8782 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2015/12/10 16:22:00 [只看该作者]

??? 我这边打开是有的,Table名称是考勤,窗口是考勤,有打印控件的,都写了代码的。我再传一个上来

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



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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/10 16:36:00 [只看该作者]

设置列格式

 

DataTables("考勤_Table1").DataCols("上班时间").SetDateTimeFormat(DateTimeFormatEnum.Time)
DataTables("考勤_Table1").DataCols("上班时限").SetDateTimeFormat(DateTimeFormatEnum.Time)
DataTables("考勤_Table1").DataCols("上班计时").ExtendType = ExtendTypeEnum.TimeSpan
DataTables("考勤_Table1").DataCols("下班时间").SetDateTimeFormat(DateTimeFormatEnum.Time)
DataTables("考勤_Table1").DataCols("下班时限").SetDateTimeFormat(DateTimeFormatEnum.Time)
DataTables("考勤_Table1").DataCols("下班计时").ExtendType = ExtendTypeEnum.TimeSpan
DataTables("考勤_Table1").DataCols("工作时长").ExtendType = ExtendTypeEnum.TimeSpan

 

------------------------------------------------

 

打印代码

 

Dim doc As New PrintDoc '定义一个新报表
Dim rt As New prt.RenderTable() '定义一个新表格
Dim n As New prt.RenderText '定义一个文本对象
Dim n1 As New prt.RenderText '定义一个文本对象
Dim n2 As New prt.RenderText '定义一个文本对象
Dim n3 As New prt.RenderText '定义一个文本对象
'Dim n4 As New prt.RenderText '定义一个文本对象
Dim st As String
Dim tb As Table = Tables("考勤_Table1")
n.Text = "员工工作考勤明细报表" '设置文本对象的内容
n.Style.Font = New Font("黑体", 20 , FontStyle.Bold) '设置文本对象的字体
n.Style.TextAlignHorz = prt.AlignHorzEnum.Center '文本内容水平居中
doc.Body.Children.Add(n)
n1.Text = "打印日期:"& Date.Now
n1.Style.Font = New Font("黑体", 8 , FontStyle.Bold) '设置文本对象的字体
n1.Style.TextAlignHorz = prt.AlignHorzEnum.Right '文本内容水平居中
n1.X = 0 + 20 '指定水平位置
n1.y = 18 + 20 '指定垂直位置

n3.Style.Font = New Font("黑体", 8 , FontStyle.Bold) '设置文本对象的字体
n3.Style.TextAlignHorz = prt.AlignHorzEnum.Left '文本内容水平居中
n3.X = 5 + 20 '指定水平位置
n3.y = 18 + 20 '指定垂直位置
n3.Text = e.Form.Controls("Label5").Text

doc.Body.Children.Add(n3) '将文本对象加入到报表
doc.Body.Children.Add(n2) '将文本对象加入到报表
doc.Body.Children.Add(n1)
doc.PageSetting.Landscape = True '横向打印
rt.Width = "243" '表格宽度为自动,也就是等于各列设置宽度之和
rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded '表格宽度超出页宽时,可以水平换页
rt.Style.Font = tb.Font
For c As Integer = 0 To tb.Cols.Count -1 '逐列设置和填入内容
    rt.Cells(0,c).Text = tb.Cols(c).Name '列名作为标题
    rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center '标题内容水平居中
    rt.Cols(c).Width = tb.Cols(c).PrintWidth '列宽等于实际列宽
    rt.Style.Spacing.Top = 10 '表格和前面对象的垂直间隔为4毫米
    rt.Style.Spacing.Bottom = 10 '表和和前对象的垂直间隔为10毫米
    If tb.Cols(c).IsNumeric OrElse tb.Cols(c).IsDate Then '如果是数值或日期列
        rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Center '数据水平居中
    End If
   
    If tb.Cols(c).IsNumeric Then
        Select tb.Cols(c).Name
            Case "工作时长"
                For r As Integer = 0 To tb.Rows.Count -1 '开始填入该列内容
                    rt.Cells(r + 1, c).Text = tb(r,c) \ 3600 & ":" & Format((tb(r,c) Mod 3600) \ 60,"00")
                    rt.Rows(0).Height = 7 '设置行高
                Next
            Case Else
                For r As Integer = 0 To tb.Rows.Count -1 '开始填入该列内容
                    rt.Cells(r + 1, c).Text = Format(tb(r,c), "0")
                    rt.Rows(0).Height = 7 '设置行高
                Next
        End Select
       
    ElseIf tb.Cols(c).IsDate
        Select tb.Cols(c).Name
            Case "上班时间"
                For r As Integer = 0 To tb.Rows.Count -1 '开始填入该列内容
                    rt.Cells(r + 1, c).Text = Format(tb(r,c), "HH:mm")
                    rt.Rows(0).Height = 7 '设置行高
                Next
        End Select
    Else
        For r As Integer = 0 To tb.Rows.Count -1 '开始填入该列内容
            rt.Cells(r + 1, c).Text = tb(r,c)
            rt.Rows(0).Height = 7 '设置行高
        Next
        For i As Integer = 1 To 9
            rt.Rows(i).Height = 5.5
        Next
    End If
Next
rt.Style.Gridlines.All = New prt.Linedef(Color.Black) '灰色网格线
rt.CellStyle.Spacing.All = 0.5 '单元格内距设为0.5毫米
rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center '第一行内容水平居中
rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All '利用行组,将第一行设为表头
rt.Style.Font = New Font("宋体", 10 , FontStyle.Bold) '设置文本对象的字体
doc.Body.Children.Add(rt) '将表格加入到报表
doc.Preview()


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


加好友 发短信
等级:五尾狐 帖子:1174 积分:8782 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2015/12/10 17:58:00 [只看该作者]

感谢大红袍老师的指导,上述代码还有一个问题,“日期”这一列在报表中都不显示,是空值,我设置的日期列是DATE。ACCESS是长日期,不知是哪里的问题
[此贴子已经被作者于2015/12/10 17:59:30编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/10 18:08:00 [只看该作者]

Case "上班时间", "上班时限"

 

需要处理的列,都写上去,而且要处理其余的的情况

 

     Select tb.Cols(c).Name
            Case "上班时间", "上班时限"
                For r As Integer = 0 To tb.Rows.Count -1 '开始填入该列内容
                    rt.Cells(r + 1, c).Text = Format(tb(r,c), "HH:mm")
                    rt.Rows(0).Height = 7 '设置行高
                Next

            Case Else

                '写上你的代码
        End Select


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