Foxtable(狐表)用户栏目专家坐堂 → 专业报表自动换行失败


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

主题:专业报表自动换行失败

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


加好友 发短信
等级:三尾狐 帖子:655 积分:5004 威望:0 精华:0 注册:2011/11/26 17:46:00
专业报表自动换行失败  发帖心情 Post By:2014/7/16 16:08:00 [只看该作者]

貌似在专业报表里的表格里添加的文字会自动换行.

但是很奇怪的是貌似只会根据某一列的文字多少来确定行高.结果就是某些列的文字显示不完

后来我在没有自动调整行高的行的相应代码位置添加了.WordWrap = true,仍然不对

一下是截取关键部位的代码,大家指点指点

 

 

 

For i As Integer = 2 To hs + 1
        rx2 = New prt.RenderText '创建一个新的文本对象
        rx2.text = Tables("订单.订单数据").rows(i-2)("原货号") '设置文本对象的内容
        rx2.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,0).RenderObject = rx2 '放置在单元格中
        rx2 = New prt.RenderText '创建一个新的文本对象
        rx2.text = Tables("订单.订单数据").rows(i-2)("原面料") '设置文本对象的内容
        rx2.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,1).RenderObject = rx2 '放置在单元格中
        rx2 = New prt.RenderText '创建一个新的文本对象
        rx2.text = Tables("订单.订单数据").rows(i-2)("原颜色") '设置文本对象的内容
        rx2.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,2).RenderObject = rx2 '放置在单元格中
        rx2 = New prt.RenderText '创建一个新的文本对象
        rx2.text = Tables("订单.订单数据").rows(i-2)("现货号") '设置文本对象的内容
        rx2.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,3).RenderObject = rx2 '放置在单元格中
        rx2 = New prt.RenderText '创建一个新的文本对象
        rx2.text = Tables("订单.订单数据").rows(i-2)("件数") '设置文本对象的内容
        rx2.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,4).RenderObject = rx2 '放置在单元格中
        rx2 = New prt.RenderText '创建一个新的文本对象
        rx2.text = Tables("订单.订单数据").rows(i-2)("规格") '设置文本对象的内容
        rx2.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,5).RenderObject = rx2 '放置在单元格中
        rx2 = New prt.RenderText '创建一个新的文本对象
        rx2.text = Tables("订单.订单数据").rows(i-2)("厂价") '设置文本对象的内容
        rx2.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,6).RenderObject = rx2 '放置在单元格中
        rx2 = New prt.RenderText '创建一个新的文本对象
        rx2.text = Tables("订单.订单数据").rows(i-2)("备注") '设置文本对象的内容
        rx2.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,7).RenderObject = rx2 '放置在单元格中
        rtb.cells(i,7).Style.TextAlignHorz = prt.AlignHorzEnum.left '水平靠左
    Next


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/7/16 16:10:00 [只看该作者]

上个例子看看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/16 16:17:00 [只看该作者]

 你肯定设定了表格的单元格的行高了吧?不设置的话,肯定会全部显示的。


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


加好友 发短信
等级:三尾狐 帖子:655 积分:5004 威望:0 精华:0 注册:2011/11/26 17:46:00
  发帖心情 Post By:2014/7/17 14:46:00 [只看该作者]

最后的"备注"列全部都显示出来了.而且行高貌似都是根据备注列内容的多少来显示的.完全不管前面各列的情况

所以一定备注列的内容较少,而前面列的内容较多时,就造成前面列的内容显示不完


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/17 14:55:00 [只看该作者]

以下是引用sky-18在2014-7-17 14:46:00的发言:

最后的"备注"列全部都显示出来了.而且行高貌似都是根据备注列内容的多少来显示的.完全不管前面各列的情况

所以一定备注列的内容较少,而前面列的内容较多时,就造成前面列的内容显示不完

 

不会,默认是按照内容自动行号的。除非你设置行高。


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


加好友 发短信
等级:三尾狐 帖子:655 积分:5004 威望:0 精华:0 注册:2011/11/26 17:46:00
  发帖心情 Post By:2014/7/17 15:18:00 [只看该作者]

我没有设置行高.因为如果我设置了行高那么每行的高度都一样啊.

但事实是行高会根据备注列变化.如图:

 


图片点击可在新窗口打开查看此主题相关图片如下:表内容.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:报表.jpg
图片点击可在新窗口打开查看

第一个图片是项目文件里的表内容,,第二个图片是根据内容生成的报表.

可以看到两行内容的 "原面料"的内容都是"一二三四五六七八九十",,不同的是第一行的备注列很短,而第二行很长.

结果呢,第一行的行高跟备注列变化,导致原面料列显示不完.而第二行因为备注内容很多所以行高又很高.

这是为什么呢.要不我把代码发上来看看.代码有点长,而且写得很乱,怕是看起来有点费力

 

   Dim doc As New PrintDoc '定义一个报表
    doc.PageSetting.PaperKind = 9 '纸张类型改为A4
    Doc.PageSetting.LeftMargin = 10 '设置左边距
    Doc.PageSetting.RightMargin = 10 '设置右边距
    Doc.PageSetting.TopMargin = 10 '设置上边距
    Doc.PageSetting.BottomMargin = 5 '设置下边距
    Dim rt1 As New prt.RenderText '定义一个文本对象
    Dim beiz As New prt.RenderText '定义一个文本对象
    Dim yaoq As New prt.RenderText '定义一个文本对象
    Dim yj As New prt.RenderText '定义一个文本对象
    Dim gdzj As New prt.RenderText '定义一个文本对象
    Dim rtb As New prt.RenderTable() '定义一个表格对象
    Dim hs As Integer = Tables("订单.订单数据").rows.Count
    rt1.Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中
    rt1.Style.Spacing.Bottom = 1 '设置下间隔为3毫米
    rt1.Text = "亚泰B227"
    rt1.Style.Font = New Font("宋体", 28, FontStyle.Bold) '设置字体
    rtb.Style.GridLines.All = New prt.Linedef '设置网格线
    rtb.Rows.Count = hs + 7
    rtb.Cols.count = 8
    rtb.Width = "auto"
    rtb.Cols(0).Width = 20
    rtb.Cols(1).Width = 30
    rtb.Cols(2).Width = 15
    rtb.Cols(3).Width = 19
    rtb.Cols(4).Width = 8
    rtb.Cols(5).Width = 8
    rtb.Cols(6).Width = 10
    rtb.Cols(7).width = 80
    rtb.RowGroups(0,1).Style.TextAlignVert = prt.AlignVertEnum.Center '垂直居中
    rtb.RowGroups(0,1).Style.Font = New Font("宋体", 16, FontStyle.Bold)
    rtb.RowGroups(1,1).Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中
    rtb.RowGroups(1,1).Style.TextAlignVert = prt.AlignVertEnum.Center '垂直居中
    rtb.RowGroups(1,1).Style.Font = New Font("宋体", 16, FontStyle.Bold)
    rtb.RowGroups(2,hs).Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中
    rtb.RowGroups(2,hs).Style.TextAlignVert = prt.AlignVertEnum.Center '垂直居中
    rtb.RowGroups(2,hs).Style.Font = New Font("宋体", vars("ziti"), FontStyle.Bold)
    rtb.cells(0,0).Text = "单号:" & Tables("订单").Current("单号")
    rtb.cells(0,2).Text = "订货日期:" & Tables("订单").Current("订货日期")
Dim qx As New TimeSpan(Tables("订单").current("期限"),0,0,0)
Dim dhrq As Date = Tables("订单").current("订货日期")
    rtb.cells(0,7).text = "到货日期:" & dhrq + qx
    rtb.cells(1,0).Text = "货号"
    rtb.cells(1,1).Text = "原面料"
    rtb.cells(1,2).Text = "原色"
    rtb.cells(1,3).Text = "现货号"
    rtb.cells(1,4).Text = "件数"
    rtb.cells(1,5).Text = "规格"
    rtb.cells(1,6).Text = "单价"
    rtb.cells(1,7).Text = "备注"
    For i As Integer = 2 To hs + 1
        Dim rx2 As New prt.RenderText '定义一个文本对象
        rx2 = New prt.RenderText '创建一个新的文本对象
        rx2.text = Tables("订单.订单数据").rows(i-2)("原货号") '设置文本对象的内容
        rx2.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,0).RenderObject = rx2 '放置在单元格中
        Dim rx21 As New prt.RenderText '定义一个文本对象
        rx21.text = Tables("订单.订单数据").rows(i-2)("原面料") '设置文本对象的内容
        rx21.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,1).RenderObject = rx21 '放置在单元格中
        Dim rx22 As New prt.RenderText '定义一个文本对象
        rx22.text = Tables("订单.订单数据").rows(i-2)("原颜色") '设置文本对象的内容
        rx22.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,2).RenderObject = rx22 '放置在单元格中
        Dim rx23 As New prt.RenderText '定义一个文本对象
        rx23.text = Tables("订单.订单数据").rows(i-2)("现货号") '设置文本对象的内容
        rx23.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,3).RenderObject = rx23 '放置在单元格中
        Dim rx24 As New prt.RenderText '定义一个文本对象
        rx24.text = Tables("订单.订单数据").rows(i-2)("件数") '设置文本对象的内容
        rx24.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,4).RenderObject = rx24 '放置在单元格中
        Dim rx25 As New prt.RenderText '定义一个文本对象
        rx25.text = Tables("订单.订单数据").rows(i-2)("规格") '设置文本对象的内容
        rx25.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,5).RenderObject = rx25 '放置在单元格中
        Dim rx26 As New prt.RenderText '定义一个文本对象
        rx26.text = Tables("订单.订单数据").rows(i-2)("厂价") '设置文本对象的内容
        rx26.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,6).RenderObject = rx26 '放置在单元格中
        Dim rx27 As New prt.RenderText '定义一个文本对象
        rx27.text = Tables("订单.订单数据").rows(i-2)("备注") '设置文本对象的内容
        rx27.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,7).RenderObject = rx27 '放置在单元格中
        rtb.cells(i,7).Style.TextAlignHorz = prt.AlignHorzEnum.left '水平靠左
    Next
    beiz = New prt.RenderText '创建一个新的文本对象
    beiz.text = "备注: " '设置文本对象的内容
    beiz.Style.Spacing.All = 1 '内容和网格线的距离为1
    beiz.Style.Font  = New Font("宋体", 16, FontStyle.Bold) '设置字体
    rtb.Cells(hs+2,0).RenderObject = beiz '放置在单元格中
    rtb.cells(hs+2,0).Style.TextAlignHorz = prt.AlignHorzEnum.right '水平靠右

beiz = New prt.RenderText '创建一个新的文本对象
beiz.text = Tables("订单").Current("生产备注") '设置文本对象的内容
beiz.Style.Spacing.All = 1 '内容和网格线的距离为1
beiz.Style.Font  = New Font("宋体", 16, FontStyle.Bold) '设置字体
rtb.Cells(hs+2,1).RenderObject = beiz '放置在单元格中
rtb.cells(hs+2,1).Style.TextAlignHorz = prt.AlignHorzEnum.left '水平靠右
 rtb.cells(hs+2,1).Style.Borders.left = new prt.linedef(0,Color.red)

   
rtb.cells(hs+2,1).spancols = 7
    rtb.cells(hs+2,0).Style.TextAlignHorz = prt.AlignHorzEnum.left '水平靠左
    yaoq = New prt.RenderText '创建一个新的文本对象
    yaoq.Text = "大货要求"
    yaoq.Style.Spacing.All = 1 '内容和网格线的距离为1
    yaoq.Style.Font  = New Font("宋体", 25, FontStyle.Bold) '设置字体
    rtb.Cells(hs+3,0).RenderObject = yaoq '放置在单元格中
    rtb.cells(hs+3,0).SpanRows = 3
    rtb.cells(hs+3,0).Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中
    rtb.cells(hs+3,0).Style.TextAlignVert = prt.AlignVertEnum.Center '垂直居中
    yaoq = New prt.RenderText '创建一个新的文本对象
    yaoq.Text = "1.商标"
    yaoq.Style.Spacing.All = 1 '内容和网格线的距离为1
    yaoq.Style.Font  = New Font("宋体", 16, FontStyle.Bold) '设置字体
    rtb.Cells(hs+3,1).RenderObject = yaoq '放置在单元格中
    yaoq = New prt.RenderText '创建一个新的文本对象
    yaoq.Text = "2.配码"
    yaoq.Style.Spacing.All = 1 '内容和网格线的距离为1
    yaoq.Style.Font  = New Font("宋体", 16, FontStyle.Bold) '设置字体
    rtb.Cells(hs+4,1).RenderObject = yaoq '放置在单元格中
    yaoq = New prt.RenderText '创建一个新的文本对象
    yaoq.Text = "3.里皮"
    yaoq.Style.Spacing.All = 1 '内容和网格线的距离为1
    yaoq.Style.Font  = New Font("宋体", 16, FontStyle.Bold) '设置字体
    rtb.Cells(hs+5,1).RenderObject = yaoq '放置在单元格中
    yaoq = New prt.RenderText '创建一个新的文本对象
    yaoq.Text = "   " & Tables("订单").Current("商标")
    yaoq.Style.Spacing.All = 1 '内容和网格线的距离为1
    yaoq.Style.Font  = New Font("宋体", 16, FontStyle.Bold) '设置字体
    rtb.cells(hs+3,2).SpanCols = 6
    rtb.Cells(hs+3,2).RenderObject = yaoq '放置在单元格中
    yaoq = New prt.RenderText '创建一个新的文本对象
    yaoq.Text = "   " & Tables("订单").Current("配码")
    yaoq.Style.Spacing.All = 1 '内容和网格线的距离为1
    yaoq.Style.Font  = New Font("宋体", 16, FontStyle.Bold) '设置字体
    rtb.cells(hs+4,2).SpanCols = 6
    rtb.Cells(hs+4,2).RenderObject = yaoq '放置在单元格中
    yaoq = New prt.RenderText '创建一个新的文本对象
    yaoq.Text = "   " & Tables("订单").Current("里皮")
    yaoq.Style.Spacing.All = 1 '内容和网格线的距离为1
    yaoq.Style.Font  = New Font("宋体", 16, FontStyle.Bold) '设置字体
    rtb.cells(hs+5,2).SpanCols = 6
    rtb.Cells(hs+5,2).RenderObject = yaoq '放置在单元格中
   
    gdzj = New prt.RenderText '创建一个新的文本对象
    gdzj.Text = "本单件数总计:" & Tables("订单").Current("该单件数")
    gdzj.Style.Spacing.All = 1 '内容和网格线的距离为1
    gdzj.Style.Font  = New Font("宋体", 16, FontStyle.Bold) '设置字体
    gdzj.style.TextColor = Color.red
    rtb.cells(hs+6,0).SpanCols = 6
    rtb.Cells(hs+6,0).RenderObject = gdzj '放置在单元格中
    rtb.cells(hs+6,0).Style.Borders.left = new prt.linedef(0,Color.red)
    rtb.cells(hs+6,0).Style.Borders.Bottom = new prt.linedef(0,Color.red)
    gdzj = New prt.RenderText '创建一个新的文本对象
    gdzj.Text = "本单金额总计:" & Tables("订单.订单数据").Compute("sum(厂金额)")
    gdzj.Style.Spacing.All = 1 '内容和网格线的距离为1
    gdzj.Style.Font  = New Font("宋体", 16, FontStyle.Bold) '设置字体
    gdzj.style.TextColor = Color.red
    rtb.cells(hs+6,6).SpanCols = 2
    rtb.Cells(hs+6,6).RenderObject = gdzj '放置在单元格中
    rtb.cells(hs+6,6).Style.Borders.left = new prt.linedef(0,Color.red)
    rtb.cells(hs+6,6).Style.Borders.Bottom = new prt.linedef(0,Color.red)
    rtb.cells(hs+6,6).Style.Borders.Right = new prt.linedef(0,Color.red)
    Dim zd As New Dictionary(Of Integer,Integer)
    Dim jh1 As New List(Of Integer)
    Dim jh2 As New List(Of Integer)
    zd.Add(0,1)
    Dim wz As Integer = 0
    Dim sl As Integer = 1
    For k As Integer = 3 To hs + 1
        If Tables("订单.订单数据").rows(k-2)("原货号") = Tables("订单.订单数据").rows(k-3)("原货号") Then
            zd.Remove(wz)
            sl = sl + 1
            zd.Add(wz,sl)
        Else If Tables("订单.订单数据").rows(k-2)("原货号") <> Tables("订单.订单数据").rows(k-3)("原货号") Then
            sl = 1
            wz = k - 2
            zd.Add(wz,sl)
        End If
    Next
    Dim jian As New List(of Integer)
    jian.AddRange(zd.Keys)
    For x As Integer = 0 To jian.Count-1
        rtb.cells(jian(x)+2,0).Spanrows = zd(jian(x))
        rtb.cells(jian(x)+2,1).Spanrows = zd(jian(x))
        rtb.cells(jian(x)+2,2).Spanrows = zd(jian(x))
        rtb.Cells(jian(x)+2,0).VertSplitBehavior = prt.CellSplitBehaviorEnum.Copy
        rtb.Cells(jian(x)+2,1).VertSplitBehavior = prt.CellSplitBehaviorEnum.Copy
        rtb.Cells(jian(x)+2,2).VertSplitBehavior = prt.CellSplitBehaviorEnum.Copy
    Next
    yj = New prt.RenderText '设置文本对象的内容
    yj.Text = "第[PageNo]页,共[PageCount]页   " & Tables("订单").Current("单号") '设置文本内容
    yj.Style.TextAlignHorz = prt.AlignHorzEnum.Center '居中
    yj.Style.FontSize = 8 '字体大小为8磅
    Doc.PageFooter = yj '作为页眉使用
   
   
    rtb.Cells(0,0).Spancols = 2
    rtb.cells(0,2).SpanCols = 5
    rtb.RepeatGridLinesVert = True
    doc.Body.Children.Add(rt1) '将文本对象加入到报表中
    doc.Body.Children.Add(rtb) '将表格对象加入到报表中
    doc.Preview() '预览

[此贴子已经被作者于2014-7-17 15:20:14编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/17 15:29:00 [只看该作者]

 试试这样改一下

 

        Dim rx2 As New prt.RenderText '定义一个文本对象
        rx2 = New prt.RenderText '创建一个新的文本对象
        rx2.text = Tables("订单.订单数据").rows(i-2)("原货号") '设置文本对象的内容
        rx2.Style.Spacing.All = 1 '内容和网格线的距离为1
        rtb.Cells(i,0).RenderObject = rx2 '放置在单元格中

 

 改成


        rtb.Cells(i,0).Text = Tables("订单.订单数据").rows(i-2)("原货号")


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


加好友 发短信
等级:三尾狐 帖子:655 积分:5004 威望:0 精华:0 注册:2011/11/26 17:46:00
奇怪  发帖心情 Post By:2014/7/17 15:43:00 [只看该作者]

按甜老师的方法改变代码后其他列没有问题,问题还是"原颜色"列,,而且这次不是现实不完,而是直接现实一个"0"如图:
图片点击可在新窗口打开查看此主题相关图片如下:报表1.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/17 15:46:00 [只看该作者]

对应的单元格,都要改,如

 

rtb.Cells(i,0).Text = Tables("订单.订单数据").rows(i-2)("原货号")

rtb.Cells(i,1).Text = Tables("订单.订单数据").rows(i-2)("原面料")

rtb.Cells(i,2).Text = Tables("订单.订单数据").rows(i-2)("原颜色")

[此贴子已经被作者于2014-7-17 15:46:18编辑过]

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


加好友 发短信
等级:三尾狐 帖子:655 积分:5004 威望:0 精华:0 注册:2011/11/26 17:46:00
  发帖心情 Post By:2014/7/17 15:57:00 [只看该作者]

本来一开始只改了一个"原颜色"列的代码,,生成的报表里的"原颜色"可以换行了,不过原颜色单元格第二行字只露出一半.

所以我想是不是没有改完,于是把每列都改了,,结果每列都改了后"原颜色"这列的报表直接变成了"0"

[此贴子已经被作者于2014-7-17 15:57:52编辑过]

 回到顶部
总数 22 1 2 3 下一页