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


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

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

帅哥哟,离线,有人找我吗?
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


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


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

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
sky-18
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
sky-18
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:三尾狐 帖子:655 积分:5004 威望:0 精华:0 注册:2011/11/26 17:46:00
  发帖心情 Post By:2014/7/17 15:59:00 [显示全部帖子]

我还有messagebox查了原颜色列数据,发现是对的.但报表出来却是"0"

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


加好友 发短信
等级:三尾狐 帖子:655 积分:5004 威望:0 精华:0 注册:2011/11/26 17:46:00
  发帖心情 Post By:2014/7/17 16:05:00 [显示全部帖子]

等等,,是我代码写错了.按甜老师说的改可以的.

但是我想问一下就是,为什么按我那个写法就不行呢?因为我那个写法便于设置一些单元格格式啊.


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


加好友 发短信
等级:三尾狐 帖子:655 积分:5004 威望:0 精华:0 注册:2011/11/26 17:46:00
  发帖心情 Post By:2014/7/17 16:10:00 [显示全部帖子]

错了错了,,还是不行.

按甜老师的方法改了,,报表出来和我之前的方法一样.

 

For i As Integer = 2 To hs + 1
       
        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)("原颜色")
       
         rtb.Cells(i,3).Text = Tables("订单.订单数据").rows(i-2)("现货号")
       
         rtb.Cells(i,4).Text = Tables("订单.订单数据").rows(i-2)("件数")
      
         rtb.Cells(i,5).Text = Tables("订单.订单数据").rows(i-2)("规格")
     
         rtb.Cells(i,6).Text = Tables("订单.订单数据").rows(i-2)("厂价")
      
         rtb.Cells(i,7).Text = Tables("订单.订单数据").rows(i-2)("备注")
    Next

[此贴子已经被作者于2014-7-17 16:12:44编辑过]

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


加好友 发短信
等级:三尾狐 帖子:655 积分:5004 威望:0 精华:0 注册:2011/11/26 17:46:00
  发帖心情 Post By:2014/7/17 16:31:00 [显示全部帖子]

我把项目给你传上来吧.代码在 "报表字体"窗口里面.

麻烦甜老师测试一下

 


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

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


加好友 发短信
等级:三尾狐 帖子:655 积分:5004 威望:0 精华:0 注册:2011/11/26 17:46:00
  发帖心情 Post By:2014/7/17 17:16:00 [显示全部帖子]

这个代码是用来合并上下相同单元格的.

跟标准合并模式一样.

不知道还有没有其他更好的方法.

代码我测试过,合并有效

[此贴子已经被作者于2014-7-17 17:16:07编辑过]

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