悲惨的答案
分组报表和分栏打印如何衔接 谢谢
Dim doc As New PrintDoc
Dim rt As New prt.RenderText
Dim ra As New prt.RenderArea
ra.Style.Spacing.Bottom =
2
ra.DataBinding.DataSource = BindTables("订单") '将容器绑定到订单表
ra.DataBinding.Grouping.Expressions.Add("Fields!产品.Value") '增加两个分组,分别是产品和雇员
ra.DataBinding.Grouping.Expressions.Add("Fields!雇员.Value") '
ra.Style.Spacing.Bottom = 2
'这一个RenderText无需设置DataBinding,这样每一个分组只打印一次
rt.Text= "产品:[Fields!产品.Value]
雇员:[Fields!雇员.Value]"
rt.Style.FontSize = 14
rt.Style.FontBold = True
ra.Children.Add(rt)
'这一个RenderText需要单独设置DataBinding,这样才会针对每一个数据行打印副本
rt = New prt.RenderText
rt.Text = "日期:[Format(Fields!日期.Value,""yyyy-MM-dd"")] 客户:[Fields!客户.Value] 数量:[Fields!数量.Value]"
rt.DataBinding.DataSource = ra.DataBinding.DataSource '不能漏掉这一行
ra.Children.Add(rt)
doc.body.Children.Add(ra)
doc.Preview()
打印标签
Dim doc As New PrintDoc '定义一个报表
Doc.Columns.Add()
'增加三栏
Doc.Columns.Add()
Doc.Columns.Add()
Doc.Columns(0).Spacing = 2
'栏间距2毫米
Doc.Columns(1).Spacing = 2
'栏间距2毫米
For i
As
integer = 1
to
100
Dim ra As New prt.RenderArea
Dim rt As prt.RenderText
ra.Width = "Parent.Width"
'宽度等于分栏宽度
ra.Height =
24
'高度24毫米
ra.CanSplitHorz =
False
'禁止水平分割
ra.CanSplitVert =
False
'禁止垂直分割
ra.Style.Spacing.Bottom
= 2
ra.Style.Borders.All = New prt.Linedef(0.3,
Color.Red) '设置边框
Doc.Body.ChildRen.Add(ra) '将容器加入到报表中
rt = New prt.RenderText
rt.Text =
"姓名:"
rt.X =
2
rt.Y =
2
ra.Children.Add(rt) '添加到容器中
rt = New prt.RenderText
rt.Text = "黄财德"
rt.X = 15
rt.Y = 2
ra.Children.Add(rt)
rt = New prt.RenderText
rt.Text = "职务:"
rt.X = 2
rt.Y = "Prev.Bottom + 2"
'垂直坐标位于迁移对象之下的2毫米
ra.Children.Add(rt)
rt = New prt.RenderText
rt.Text =
"总经理"
rt.X =
15
rt.Y =
"Prev.Top"
'垂直坐标和前一对象相同
ra.Children.Add(rt)
rt = New prt.RenderText
rt.Text =
"编号:"
rt.X =
2
rt.Y =
"Prev.Bottom + 2"
ra.Children.Add(rt)
rt = New prt.RenderText
rt.Text =
"44081919710917243"
rt.X = 15
rt.Y =
"Prev.Top"
ra.Children.Add(rt)
Next
Doc.Preview() '预览报表
Dim doc As New PrintDoc
Dim rt As Prt.RenderTable
Dim rx As prt.RenderText
Dim tbl As Table = Tables("发货清单明细")
Dim Rows As List(Of DataRow)
Dim Regions As List(Of String()) = tbl.DataTable.GetUniqueValues("","客户","颜色","幅宽")
doc.Pagesetting.LandScape = True
For Each Region As String() In Regions
rx = New prt.RenderText
rx.Text = "客户: " & Region(0) & "," & region(1) & "," & region(2)
doc.Body.Children.Add(rx)
rt = New prt.RenderTable
rt.Style.Font = Tables("发货清单明细").Font
rt.Style.Font = tbl.Font
'"[品名] = '" & dr1("品名") & "'And [规格] = '" & dr1("规格") & "'"
Rows = tbl.Datatable.Select("[客户] = '" & Region(0) & "'and [颜色] = '" & Region(1) & "'and [幅宽] = '" & Region(2) & "'")
For c As integer = 0 To tbl.Cols.Count - 1
rt.Cells(0,c).Text = tbl.Cols(c).Name
rt.Cols(c).Width = tbl.Cols(c).PrintWidth
For r As integer = 0 To Rows.Count -1
rt.Cells(r + 1, c).Text = rows(r)(tbl.Cols(c).Name)
Next
Next
rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All
doc.Body.Children.Add(rt)
Next
doc.preview()
[此贴子已经被作者于2010-4-6 17:32:05编辑过]
Dim doc As New PrintDoc
Dim rt As Prt.RenderTable
Dim rx As prt.RenderText
Dim re As prt.RenderText
Dim tbl As Table = Tables("订单")
Dim Rows As List(Of DataRow)
Dim Regions As List(Of String()) = tbl.DataTable.GetUniqueValues("","客户","产品","雇员")
doc.Pagesetting.LandScape = True
For Each Region As String() In Regions
rx = New prt.RenderText
rx.Text = "客户: " & Region(0) & "," & region(1) & "," & region(2)
rx.Style.FontBold = True
rx.Style.Spacing.Bottom = 3
doc.Body.Children.Add(rx)
re = New prt.RenderText
re.Text= "合计:[Aggregates!GroupSum.Value]"
re.Style.FontBold = True
re.Style.Spacing.Bottom = 3
doc.Body.Children.Add(re)
rt = New prt.RenderTable
rt.Style.GridLines.All = New prt.Linedef
rt.Cols.Count = 10
rt.Style.Font = Tables("订单").Font
rt.Style.Font = tbl.Font
Rows = tbl.Datatable.Select("[客户] = '" & Region(0) & "'and [产品] = '" & Region(1) & "'and [雇员] = '" & Region(2) & "'")
Dim ColNames As String() = New String(){"数量"}
For r As integer = 0 To Rows.Count -1 '开始填入该列内容
select case r
case 0
rt.Cells(0, r).Text = Rows(r)(ColNames(0))
case 1 to 9
rt.Cells(0, r).Text = Rows(r)(ColNames(0))
rt.Style.Spacing.All = 1
case 10 to 19
rt.Cells(1, r-10).Text = Rows(r)(ColNames(0))
case 20 to 29
rt.Cells(2, r-20).Text = Rows(r)(ColNames(0))
case 30 to 39
rt.Cells(3, r-30).Text = Rows(r)(ColNames(0))
case 40 to 49
rt.Cells(4, r-40).Text = Rows(r)(ColNames(0))
case 50 to 59
rt.Cells(5, r-50).Text = Rows(r)(ColNames(0))
case 60 to 69
rt.Cells(6, r-60).Text = Rows(r)(ColNames(0))
case 70 to 79
rt.Cells(7, r-70).Text = Rows(r)(ColNames(0))
end select
Next
rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All
doc.Body.Children.Add(rt)
Next
doc.preview()
基本上搞定,应该可以代替部分分栏效果,就是合计如何放在右侧上方,与客户并列,一个在左,一个在右?
Dim doc As New PrintDoc
Dim rt As Prt.RenderTable
Dim rx As prt.RenderText
Dim re As prt.RenderText
Dim re1 As prt.RenderText
Dim tbl As Table = Tables("发货清单明细")
Dim Rows As List(Of DataRow)
Dim Regions As List(Of String()) = tbl.DataTable.GetUniqueValues("","颜色","颜色编号","幅宽","克重","单价") '"卷长","金额")
Dim Regi As List(Of String) = tbl.DataTable.GetUniqueValues("","客户")
Dim Regio As List(Of String) = tbl.DataTable.GetUniqueValues("","发货日期")
doc.Pagesetting.LandScape = True
dim sum1 as single=0
dim sum3 as single=0
dim sum2 as single=0
dim count as short=0
re = New prt.RenderText
re.Text= "发货结算单"
're.Style.FontBold = True
're.Style.Spacing.Bottom = 3
re.Style.FontSize = 16
re.Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中
doc.Body.Children.Add(re)
Dim rx1 As New prt.RenderTable
rx1.Cells(0,0).Text = "客户:" & regi(0)
rx1.Cells(0,1).Text = "发货日期:" & regio(0).SubString(0,9)
rx1.Cells(0,2).Text = "货单号: ."
rx1.Cols(0).Style.TextAlignHorz = prt.AlignHorzEnum.Left
rx1.Cols(1).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rx1.Cols(1).Style.TextAlignHorz = prt.AlignHorzEnum.right
rx1.Style.Borders.Bottom = New prt.LineDef (0.3, color.gray)'设置底边框
rx1.CellStyle.Spacing.Bottom = 0.5 '底端内容缩进0.5毫米
'rx1.Style.FontSize = 8 '字体大小为8磅
rx1.Style.Spacing.top = 2
'Doc.PageHeader = rx1
doc.Body.Children.Add(rx1)
'dim f As integer=0
Dim rf As new Prt.RenderTable
rf.Style.TextAlignHorz = prt.AlignHorzEnum.center
rf.Cols(0).Width = 8
rf.Cols(1).Width = 32
rf.Cols(2).Width = 30
rf.Cols(3).Width = 14
rf.Cols(4).Width = 20
rf.Cols(5).Width = 14
rf.Cols(6).Width = 20
rf.Cols(7).Width = 14
rf.width="auto"
rf.cells(0,0).text="编号"
rf.cells(0,1).text="颜色编号"
rf.cells(0,2).text="规格"
rf.cells(0,3).text="件数"
rf.cells(0,4).text="重量"
rf.cells(0,5).text="单价"
rf.cells(0,6).text="金额"
rf.cells(0,7).text="备注"
doc.Body.Children.Add(rf)
dim f As integer=0
For Each Region As String() In Regions
dim sum as single=0
'dim f As integer=0
rt = New prt.RenderTable
'rt.Style.GridLines.All = New prt.Linedef(0.1, color.gray)
'rt.Cols.Count = 15
'rt.style.WordWrap=true
'rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center
Rows = tbl.Datatable.Select("[颜色] = '" & Region(0) & "'and [颜色编号] = '" & Region(1) & "'and [幅宽] = '" & Region(2) & "'and [克重] = '" & region(3) & "'and [单价] = '" & region(4) & "'")
Dim ColNames As String() = New String(){"重量"}
For r As integer = 0 To Rows.Count -1 '开始填入该列内容
count=0
select case r
case 0
rt.Cells(0, r).Text = Rows(r)(ColNames(0))
sum=sum+Rows(r)(ColNames(0))
count=1
case 1 to 14
rt.Cells(0, r).Text = Rows(r)(ColNames(0))
sum=sum+Rows(r)(ColNames(0))
case 15 to 29
rt.Cells(1, r-15).Text = Rows(r)(ColNames(0))
sum=sum+Rows(r)(ColNames(0))
count=count+1
case 30 to 44
rt.Cells(2, r-30).Text = Rows(r)(ColNames(0))
sum=sum+Rows(r)(ColNames(0))
count=count+1
case 45 to 59
rt.Cells(3, r-45).Text = Rows(r)(ColNames(0))
sum=sum+Rows(r)(ColNames(0))
count=count+1
case 60 to 74
rt.Cells(4, r-60).Text = Rows(r)(ColNames(0))
sum=sum+Rows(r)(ColNames(0))
count=count+1
case 75 to 89
rt.Cells(5, r-75).Text = Rows(r)(ColNames(0))
sum=sum+Rows(r)(ColNames(0))
count=count+1
end select
'rt.Cells(0,10).SpanRows = count
next
sum=sum*0.976
rf = New prt.RenderTable
rf.Style.TextAlignHorz = prt.AlignHorzEnum.center
rf.Style.GridLines.All = New prt.Linedef(0.1, color.gray)
'rf.height=8
rf.cols(0).style.fontsize = 12 '设置行高
rf.Cols(0).Width = 8
rf.Cols(1).Width = 32
rf.Cols(2).Width = 30
rf.Cols(3).Width = 14
rf.Cols(4).Width = 20
rf.Cols(5).Width = 14
rf.Cols(6).Width = 20
rf.Cols(7).Width = 14
rf.width="auto"
rf.cells(f+1,1).text=region(0) & "," & region(1)
rf.cells(f+1,2).text=region(2) & "*" & region(3) & "g*2222m"
rf.cells(f+1,3).text=rows.count & "件"
rf.cells(f+1,4).text=math.round(sum,2) & "kg"
rf.cells(f+1,5).text=region(4)
rf.cells(f+1,6).text=Tables("发货清单明细").DataTable.Compute("Sum(金额)","[颜色] = '" & Region(0) & "'and [颜色编号] = '" & Region(1) & "'and [幅宽] = '" & Region(2) & "'and [克重] = '" & region(3) & "'and [单价] = '" & region(4) & "'")
rf.cells(f+1,0).text=f+1
f=f+1
doc.Body.Children.Add(rf)
' rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All
'doc.Body.Children.Add(rt)
'next
sum1=sum1+sum
sum2=sum2+Rows.Count
sum3=sum3+Tables("发货清单明细").DataTable.Compute("Sum(金额)","[颜色] = '" & Region(0) & "'and [颜色编号] = '" & Region(1) & "'and [幅宽] = '" & Region(2) & "'and [克重] = '" & region(3) & "'")
next
re1 = New prt.RenderText
re1.Text= "总重量:" & sum1 & "公斤 总件数" & sum2 & "件"
re1.Style.Spacing.top = 5
re1.Style.FontSize = 12
doc.Body.Children.Add(re1)
rx = New prt.RenderText
rx.Text = "金额: " & sum3 'Tables("发货清单明细").DataTable.Compute("Sum(金额)","[颜色] = '" & Region(0) & "'and [颜色编号] = '" & Region(1) & "'and [幅宽] = '" & Region(2) & "'and [克重] = '" & region(3) & "'")
'Region(0) & "," & region(1) & "," & region(2) & "," & region(3) & " 重量:" & sum & " 件数" & Rows.Count
rx.Style.FontBold = True
rx.Style.Spacing.top = 3
doc.Body.Children.Add(rx)
doc.PageSetting.Width = 175 '纸张宽度为100毫米
doc.PageSetting.Height = 255 '纸张高度为120毫米
Doc.PageSetting.LeftMargin = 10 '设置左边距
Doc.PageSetting.RightMargin = 10 '设置右边距
Doc.PageSetting.TopMargin = 20 '设置上边距
Doc.PageSetting.BottomMargin = 20 '设置下边距
doc.preview()
[此贴子已经被作者于2010-4-8 0:10:36编辑过]