如何在Crystal视图运行时允许其他表单执行? 下面是代码:
Public Sub printCurrentHistory()
If dt.Columns.Count = 0 Then
With dt
.Columns.Add("update_time")
.Columns.Add("sender")
.Columns.Add("humidity")
.Columns.Add("temperature")
.Columns.Add("rain")
.Columns.Add("wind_dir")
.Columns.Add("wind_speed")
End With
End If
For Each dr As DataGridViewRow In frmMain.dgvSearch.Rows
dt.Rows.Add(dr.Cells("Updated").Value, dr.Cells("Sender").Value, dr.Cells("Humidity").Value, dr.Cells("Temperature").Value, dr.Cells("Rain").Value, dr.Cells("Wind_Direction").Value, dr.Cells("Wind_Speed").Value)
Next
Dim rptDoc As CrystalDecisions.CrystalReports.Engine.ReportDocument
rptDoc = New CrystalReport1
rptDoc.SetDataSource(dt)
frmPrint.CrystalReportViewer1.ReportSource = rptDoc
frmPrint.ShowDialog()
dt.Rows.Clear()
dt.Clear()
dt.Dispose()
rptDoc.Dispose()
End Sub
Crystal Viewer报表:
答案 0 :(得分:2)
Show
和ShowDialog
之间的区别在于ShowDialog
是应用程序模态,这意味着它会阻止其他任何事情发生,直到您关闭它。另一方面,Show
会引发Form
并继续前进。在查看代码时,我猜你的问题是你从rptDoc
下面处理了frmPrint
和你的数据源。您需要将frmPrint更改为更自主。我会做类似的事情。
frmPrint = New ParentFormName(dt) 'The Form frmPrint is instantiated from
frmPrint.Show()
然后
Public Sub New( dt as DataTable)
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Dim rptDoc As CrystalDecisions.CrystalReports.Engine.ReportDocument
rptDoc = New CrystalReport1
rptDoc.SetDataSource(dt)
CrystalReportViewer1.ReportSource = rptDoc
End
然后在您的FormClosing事件中处理您的对象。
这是未经测试的代码,我只是想给你一些想法。
我在评论中说的另一个选项是在您的打印表单中添加一个事件,并在主表单中订阅它。
Public Class Form1
Dim frm2 As Form2
Private Sub CloseMyData()
'Dispose of your Data here
RemoveHandler frm2.myClosingEvent, AddressOf CloseMyData
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
frm2 = New Form2
AddHandler frm2.myClosingEvent, AddressOf CloseMyData
frm2.Show()
End Sub
End Class
Public Class Form2
Public Event myClosingEvent()
Private Sub Form2_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
RaiseEvent myClosingEvent()
End Sub
End Class
答案 1 :(得分:1)
而不是
frmPrint.ShowDialog()
使用
frmPrint.Show()