以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  报表的高度设置问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=48959)

--  作者:hdffzxf
--  发布时间:2014/4/9 19:24:00
--  报表的高度设置问题
在专业报表中,想将报表的高度自由设置容器的倍数,比如设置成容器的一半: rt.Height ="50%Parent.Height" ,但奇怪的事儿发生了,报表竟然插进去3-4行的空行,把这个高度的设置去掉以后,恢复正常,想不明白这是为何?后来发现只要设定   rt.Height 的行高就会出现这个问题,如何解决呢?
--  作者:有点甜
--  发布时间:2014/4/9 19:29:00
--  
 上传个例子,或者贴出可测试的代码
--  作者:hdffzxf
--  发布时间:2014/4/10 12:51:00
--  

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:专业报表打印测试.foxdb

 

相关代码:

Dim doc As New PrintDoc \'定义一个新报表
Dim rt As New prt.RenderTable \'定义一个表体表格
Dim bt As New prt.RenderTable \'定义页眉表格
Dim tb As Table = Tables("窗口1_Table1")
Dim cnt As Integer \'用于记录列位置
Dim hd As Integer = tb.HeaderRows \'获得表头的层数
tb.CreateReportHeader(rt,True) \'生成多层表头,排除隐藏列

 

 

For c As Integer = 0 To tb.Cols.Count -1 \'逐列设置和填入内容
    If tb.Cols(c).Visible Then
        rt.Cols(cnt).Width = tb.Cols(c).PrintWidth \'列宽等于实际列宽
        If tb.Cols(c).IsNumeric OrElse tb.Cols(c).IsDate Then \'如果是数值或日期列
            rt.Cols(cnt).Style.TextAlignHorz = prt.AlignHorzEnum.Right \'数据水平靠右
        End If
        For r As Integer = 0 To tb.Rows.Count -1 \'开始填入该列内容
            rt.Cells(r + hd+3, cnt).Style.F   \'设置字体
            rt.Cells(r + hd+3, cnt).Style.FontSize=10             \'设置字号
            rt.Cells(r + hd+3, cnt).Style.Fontbold = False         \'不设置加粗
            rt.Rows(r + hd+3).Height = tb.DefaultRowHeight/4  \'设置行高
           
            If tb.Cols(c).IsNumeric And tb.Cols(c).Name Like "*行次*"=False And tb.Cols(c).Name Like "*序号*"=False Then
                If tb(r,c)=0 Then \'如果是数值或日期列
                    rt.Cells(r + hd+3, cnt).Text =""
                Else
                    rt.Cells(r + hd+3, cnt).Text = format(tb(r,c),"#,###.00")
                End If
            Else
                rt.Cells(r + hd+3, cnt).Text = tb(r,c)
            End If
        Next
        cnt = cnt + 1
    End If
Next


rt.Style.Gridlines.All = New prt.Linedef(Color.black  ) \'黑色网格线
rt.CellStyle.Spacing.All = 0.5 \'单元格内距设为0.5毫米


Doc.PageHeader = bt \'表名做为页眉使用
rt.RowGroups(0, hd).Header = prt.TableHeaderEnum.All \'利用行组功能设置表头
rt.RowGroups(0, hd).Style.F   \'设置字体
rt.RowGroups(0, hd).Style.FontSize=10             \'设置字号
rt.RowGroups(0, hd).Style.Fontbold = False         \'不设置加粗

rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded \'  表格宽度超出页宽时,可以水平换页
rt.SplitVertBehavior = prt.SplitBehaviorEnum.SplitIfNeeded \'     \'表格宽度超出页宽时,可以水平换页

rt.Height ="Parent.Height"           
doc.Body.Children.Add(rt) \'将表格加入到报表
doc.Preview()


 


--  作者:有点甜
--  发布时间:2014/4/10 13:57:00
--  

这段代码,为什么要+3?

 

            rt.Cells(r + hd+3, cnt).Style.F   \'设置字体
            rt.Cells(r + hd+3, cnt).Style.FontSize=10             \'设置字号
            rt.Cells(r + hd+3, cnt).Style.Fontbold = False         \'不设置加粗
            rt.Rows(r + hd+3).Height = tb.DefaultRowHeight/4  \'设置行高
           
            If tb.Cols(c).IsNumeric And tb.Cols(c).Name Like "*行次*"=False And tb.Cols(c).Name Like "*序号*"=False Then
                If tb(r,c)=0 Then \'如果是数值或日期列
                    rt.Cells(r + hd+3, cnt).Text =""
                Else
                    rt.Cells(r + hd+3, cnt).Text = format(tb(r,c),"#,###.00")
                End If
            Else
                rt.Cells(r + hd+3, cnt).Text = tb(r,c)
            End If


--  作者:hdffzxf
--  发布时间:2014/4/10 15:48:00
--  

想起怎么回事儿了,谢谢!这是个在开发中遗留的问题没改正,多谢!