改为这样报错,红色标注代码表示换页:
.NET Framework 版本:4.0.30319.18063
Foxtable 版本:2021.11.4.1
错误所在事件:窗口,胸牌排版,Button1,Click
详细错误信息:
Object reference not set to an instance of an object.
Dim doc As New PrintDoc '定义一个报表
doc.Stacking = prt.StackingRulesEnum.InlineLeftToRight '设置排列方式
If e.Form.Controls("TextBox4").Value Is Nothing OrElse e.Form.Controls("TextBox5").Value Is Nothing Then
messagebox.show("模板长宽不能为空")
Return
End If
If e.Form.Controls("RadioButton1").Checked = True And e.Form.Controls("ComboBox1").text = e.form.controls("combobox1").items(0) Then
doc.PageSetting.Width = 297 'A3纸张宽度,单位为毫米
doc.PageSetting.Height = 420 'A3纸张高度,单位为毫米
ElseIf e.Form.Controls("RadioButton2").Checked = True And e.Form.Controls("ComboBox1").text = e.form.controls("combobox1").items(1) Then
doc.PageSetting.Width = 210 'A4纸张宽度,单位为毫米
doc.PageSetting.Height = 297 'A4纸张高度,单位为毫米
ElseIf e.Form.Controls("RadioButton2").Checked = True And e.Form.Controls("ComboBox1").text = e.form.controls("combobox1").items(2) Then
doc.PageSetting.Width = 148.5 'A5纸张宽度,单位为毫米
doc.PageSetting.Height = 210 'A5纸张高度,单位为毫米
ElseIf e.Form.Controls("RadioButton2").Checked = True And e.Form.Controls("ComboBox1").text = e.form.controls("combobox1").items(3) Then
doc.PageSetting.Width = 257 'B4纸张宽度,单位为毫米
doc.PageSetting.Height = 364 'B4纸张高度,单位为毫米
ElseIf e.Form.Controls("RadioButton2").Checked = True And e.Form.Controls("ComboBox1").text = e.form.controls("combobox1").items(4) Then
doc.PageSetting.Width = 176 'B5纸张宽度,单位为毫米
doc.PageSetting.Height = 250 'B5纸张高度,单位为毫米
ElseIf e.Form.Controls("RadioButton2").Checked = True And e.Form.Controls("ComboBox1").text = e.form.controls("combobox1").items(5) Then
doc.PageSetting.Width = 420 'A2纸张宽度,单位为毫米
doc.PageSetting.Height = 594 'A2纸张高度,单位为毫米
ElseIf e.Form.Controls("RadioButton2").Checked = True And e.Form.Controls("ComboBox1").text = e.form.controls("combobox1").items(6) Then
doc.PageSetting.Width = 105 'A6纸张宽度,单位为毫米
doc.PageSetting.Height = 148 'A6纸张高度,单位为毫米
ElseIf e.Form.Controls("RadioButton1").Checked = True And e.Form.Controls("TextBox1").text IsNot Nothing And e.Form.Controls("TextBox2").text IsNot Nothing Then
doc.PageSetting.Width = Val(e.Form.Controls("TextBox2").Value) '自定义纸张宽度,单位为毫米
doc.PageSetting.Height = Val(e.Form.Controls("TextBox1").Value) '自定义纸张高度,单位为毫米
Else
messagebox.show("纸张规格不能为空")
Return
End If
If e.Form.Controls("ComboBox2").Value Is Nothing Then
messagebox.show("棋赛名称不能为空")
Return
End If
Dim c1 As Double = e.Form.Controls("TextBox4").Value
Dim c2 As Double = e.Form.Controls("TextBox5").Value
Dim c3 As Double = Val(doc.PageSetting.Width)
Dim c4 As Double = Val(doc.PageSetting.Height)
Doc.PageSetting.LeftMargin = (c3 - c1*(Math.Floor(c3/c1)))/2 '设置左边距
Doc.PageSetting.RightMargin = (c3 - c1*(Math.Floor(c3/c1)))/2 '设置右边距
Doc.PageSetting.TopMargin = (c4 - c2*(Math.Floor(c4/c2)))/2 '设置上边距
Doc.PageSetting.BottomMargin = (c4 - c2*(Math.Floor(c4/c2)))/2 '设置下边距
Dim Min0 As String = DataTables("基本信息").SQLCompute("Min(编号)","[棋赛名称] = '" & e.Form.Controls("ComboBox2").text & "'")
For n As Integer = 1 To DataTables("基本信息").SQLCompute("Count(姓名)","[棋赛名称] = '" & e.Form.Controls("ComboBox2").text & "'")/((Math.Floor(c3/c1)) * (Math.Floor(c4/c2)))
Dim rep As New prt.RenderEmpty '定义一个新的空对象
rep.BreakBefore = prt.BreakEnum.Page '打印前换页
doc.Body.Children.Add(rep )
For i As Integer = 1 To DataTables("基本信息").SQLCompute("Count(姓名)","[棋赛名称] = '" & e.Form.Controls("ComboBox2").text & "'")
Dim rt As New prt.RenderTable() '定义一个表格对象
Dim dr As DataRow = DataTables("基本信息").SQLFind("[棋赛名称] = '" & e.Form.Controls("ComboBox2").text & "' And [编号] = '" & Min0 & "'")
If dr IsNot Nothing Then
rt.Style.GridLines.All = New prt.LineDef '将网格线类型设为默认类型
rt.Style.GridLines.Horz = new Prt.LineDef(Color.white)
rt.Style.GridLines.Vert = new Prt.LineDef(Color.white)
rt.Width = c1 '表格宽度为
rt.Height = c2
rt.Style.Spacing.All = 2 '和其他对象之间的间隔为2mm
rt.SplitVertBehavior = prt.SplitBehaviorEnum.Never '避免垂直换页的时候,表格被分割成两部分.
rt.Rows.Count = 8 '设置总行数
rt.Cols.Count = 7 '设置总列数
rt.Rows(0).Height = 7
rt.Cols(0).Width = 3
rt.cells(0,0).SpanCols = 7
rt.cells(1,1).SpanCols = 5
rt.Rows(1).Height = 10
rt.Cells(1,1).Style.FontBold = True
rt.Cells(1,1).Style.FontName = e.Form.Controls("FontPicker1").Value
rt.Cells(1,1).Style.FontSize = e.Form.Controls("ComboBox3").Value
rt.cells(1,1).Text = e.Form.Controls("ComboBox2").text
rt.cells(1,1).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.cells(1,1).Style.TextAlignVert = prt.AlignHorzEnum.Center
rt.Cells(2,1).SpanCols = 5
If dr("棋赛副名") = Nothing Then
rt.Cells(2,1).Text = Nothing
rt.Rows(2).Height = 0
Else
rt.Cells(2,1).Text = dr("棋赛副名")
End If
rt.Cells(2,1).Style.FontName = e.Form.Controls("FontPicker2").Value
rt.Cells(2,1).Style.FontSize = e.Form.Controls("ComboBox4").Value
rt.Cells(2,1).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.cells(2,1).Style.TextAlignVert = prt.AlignHorzEnum.Center
rt.Rows(3).Height = 2
rt.Cols(3).Width = 37
rt.Rows(4).Height = 30
rt.Cells(4,3).Text = dr("编号")
rt.Cells(4,3).Style.FontName = e.Form.Controls("FontPicker3").Value
rt.Cells(4,3).Style.FontSize = e.Form.Controls("ComboBox5").Value
rt.Cells(4,3).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.cells(4,3).Style.TextAlignVert = prt.AlignHorzEnum.Center
rt.Rows(5).Height = 2
rt.cells(6,2).SpanCols = 3
rt.Cells(6,2).Text= dr("姓名")
rt.Cells(6,2).Style.FontName = e.Form.Controls("FontPicker4").Value
rt.Cells(6,2).Style.FontSize = e.Form.Controls("ComboBox6").Value
rt.Cells(6,2).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.cells(6,2).Style.TextAlignVert = prt.AlignHorzEnum.Center
rt.cells(7,0).SpanCols = 7
rt.Rows(7).Height = 7
rt.Cols(6).Width = 3
ElseIf dr.IsNull("编号") Then
Continue For
End If
doc.Body.Children.Add(rt) '将表格对象加入到报表中
Min0 = CStr(CInt(Min0) + 1)
Next
Next
Doc.Preview() '预览报表