4,818
社区成员
发帖
与我相关
我的任务
分享
Protected Sub cmdPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdPrint.Click
Try
Dim crs As New CrystalDecisions.Web.CrystalReportSource
Dim rpt As ReportDocument = crs.ReportDocument
'Dim rpt As ReportDocument = Me.CrystalReportSource1.ReportDocument
rpt.Load(Server.MapPath("Print.rpt")) '加载报表
rpt.SetDataSource(getDataSet()) '加载数据源
crs.DataBind()
Me.CrystalReportViewer1.ReportSource = rpt
Me.CrystalReportViewer1.DataBind()
Catch ex As Exception
Throw ex
End Try
End Sub
'数据源
Function getDataSet() As DataSet
Dim ds As New DataSet
Dim dtCustomers As New DataTable
dtCustomers.TableName = "Customers"
Dim dtOrders As New DataTable
dtOrders.TableName = "Orders"
Dim dtOrderDetail As New DataTable
dtOrderDetail.TableName = "OrderDetail"
'给datatable赋数据的代码就省略了 通过dubug 每次这里都是没问题的
ds.Tables.Add(dtCustomers)
ds.Tables.Add(dtOrders)
ds.Tables.Add(dtOrderDetail)
Return ds
End Function

Private Shared flag As Boolean = False
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If flag Then 'flag的作用根据你自己的情况定义 我的报表页面也在查看页面 所以用这个来限制报表是否显示
If (Session("rpt") IsNot Nothing) Then '赋session
CrystalReportViewer1.ReportSource = CType(Session("rpt"), ReportDocument)
End If
End If
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
flag = False
'...省略自己用的若干代码
End If
End Sub
Sub Print()
Try
Dim crs As New CrystalDecisions.Web.CrystalReportSource
Dim rpt As ReportDocument = crs.ReportDocument
'Dim rpt As ReportDocument = Me.CrystalReportSource1.ReportDocument
rpt.Load(Server.MapPath("Print.rpt")) '加载报表
rpt.SetDataSource(getDataSet()) '加载数据源 赋给一个dataset
crs.DataBind()
Me.CrystalReportViewer1.ReportSource = rpt
Session("rpt") = rpt 'session赋值
Me.CrystalReportViewer1.DataBind()
Catch ex As Exception
Throw ex
End Try
End Sub
Protected Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Unload
Me.CrystalReportViewer1.Dispose()
End Sub