我怎么知道 CopyToDataTable 是否没有行,这样空白页就不会出现在 vb.net 中?
我的代码有问题吗?
下面也是解决方案代码,但我如何用我的代码实现它。 谢谢
'I found the code solution below but I didn't implement it in my code
If payslips.LastOrDefault() IsNot payslip Then
report.NewPage()
End If
Private Sub Generate()
Dim dt As New DataTable()
report.Clear()
Dim query = "Select EMPID,[NAME],MONTHLYSALARY From tblemployee"
Using adapter As New OleDbDataAdapter(query, Con)
adapter.Fill(dt)
End Using
For Each row As DataRow In dt.Rows
Dim table = {row}.CopyToDataTable()
report.AddDataTable(table)
report.NewPage()
Next row
End Sub
这里的重点是,每次调用
NewPage
,都会添加一个新页面。如果默认情况下有一页并且您为每一行调用NewPage
,那么您最终会比行多一页,这正是您所看到的。
一个解决方案是在添加要在该页面上打印的数据之前调用,当且仅当需要新页面时。第一行将打印在默认页面上,因此您只需要为第二行及以后调用
NewPage
。通过使用 For
循环而不是 For Each
循环,您有一个行索引,您可以测试它以确定您是否在第一行:
For i = 0 To dt.Rows.Count - 1
Dim row = dt.Rows(i)
If i > 0 Then
'We are not on the first row so we need a new page.
report.NewPage()
End If
'...
Next