Foxtable(狐表)用户栏目专家坐堂 → 合并单元格,不合并的为何是倒着排的


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

主题:合并单元格,不合并的为何是倒着排的

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


加好友 发短信
等级:小狐 帖子:358 积分:4035 威望:0 精华:0 注册:2014/7/29 23:42:00
合并单元格,不合并的为何是倒着排的  发帖心情 Post By:2015/9/16 21:53:00 [显示全部帖子]

我用帮助里“合并单元格”的代码合并,不合并的第一列是“序号”,结果不合并的那些内容是倒着排的。


请问怎么弄成正着排的?谢谢!


帮助里的代码如下,我只是改了表名和列名,其它的没变化:


Dim doc As New PrintDoc
Dim
rt As New prt.RenderTable
Dim
tb As Table = Tables("订单")
Dim
ColNames As String() = New String(){"产品", "客户","单价","折扣","数量","金额","日期"}
Dim MergeCols As Integer = 2 '指定要合并的列数
tb.Sort = "产品,客户" '根据合并列排序
rt.Width =
"Auto"
rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded
rt.Style.Font = tb.Font
rt.Style.TextAlignVert = prt.AlignVertEnum.Center
rt.RepeatGridLinesVert =
True '换页后重复表格线
For
c As Integer = 0 To ColNames.Length - 1
   
Dim lr As Integer ' 用于保存合并区域的起始行
    rt.Cells(
0,c).Text = ColNames(c)
    rt.Cells(
0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center
    rt.Cols(c).Width = tb.Cols(ColNames(c)).PrintWidth

    If
tb.Cols(ColNames(c)).IsNumeric Orelse tb.Cols(ColNames(c)).IsDate Then
        rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right

    End
If
    For
r As integer = 0 To tb.Rows.Count - 1
       
If c <= MergeCols - 1 then '如果是要合并的列
           
Dim Merge As Boolean = True
            If
r = 0 Then
                Merge =
False
            Else
                For
n As Integer = 0 To c
                    if
tb.Rows(r)(ColNames(n)) <> tb.Rows(r - 1)(ColNames(n))
                        Merge =
False
                        Exit
For
                    End
If
                Next
            End
If
            If
Merge Then
                rt.Cells(lr,c).SpanRows = rt.Cells(lr,c).SpanRows +
1
           
Else
                rt.Cells(r +
1, c).Text = tb.Rows(r)(ColNames(c))
                rt.Cells(r +
1, c).VertSplitBehavior = prt.CellSplitBehaviorEnum.Copy '换页后重复单元格
                lr = r +
1
           
End If
        Else

            rt.Cells(r +
1, c).Text = tb.Rows(r)(ColNames(c))
        End
If
    Next
Next

rt.Style.Gridlines.All = New prt.Linedef(Color.Gray)
rt.CellStyle.Spacing.All =
0.5
rt.Rows(
0).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.RowGroups(
0,1).Header = prt.TableHeaderEnum.All
doc.Body.Children.Add(rt)
doc.Preview()



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


加好友 发短信
等级:小狐 帖子:358 积分:4035 威望:0 精华:0 注册:2014/7/29 23:42:00
回复:(大红袍)代码没问题,竖着,说明的列的宽度不...  发帖心情 Post By:2015/9/16 22:03:00 [显示全部帖子]

不是的,我没说明白。

举个例子,比如说学校里有很多个学院,每个学院有很多个班级,每个班级里有很多个学生,我把这个表格打印,前面的内容合并,到学生这里的话,我给每个学生加了一个“ID”,结果学院,班级合并了以后,学生前面的ID那一列是倒着排的序。我想让这个ID这一列正过来排。

麻烦您再看看,谢谢!

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


加好友 发短信
等级:小狐 帖子:358 积分:4035 威望:0 精华:0 注册:2014/7/29 23:42:00
回复:(大红袍)上传例子。  发帖心情 Post By:2015/9/16 22:34:00 [显示全部帖子]

我比着做了一个例子发现,代码没问题。但是我那个实际的程序还是不行。

后来在合并列排序那条代码里,把那个ID增加上,就可以了。问题解决了。谢谢!

 回到顶部