如何解决在VB.net 2003 中使用水晶报表的子报表问题
在子报表没有数据的时候.系统就会出错,以下为我使用的代码
Dim lstRptPara As New DropDownList
Dim ReportDoc As New ReportDocument
Dim cn As SqlConnection
lstRptPara = Session("lstRptPara")
Dim SpName As String = lstRptPara.Items(lstRptPara.Items.Count - 1).Text
Dim RptName As String = "report/" + lstRptPara.Items(lstRptPara.Items.Count - 1).Value
cn = New SqlConnection("Server=" & servername & ";database=" & databasename & ";uid=" & userid & ";pwd=" & password)
Dim cmd As New SqlCommand(SpName, cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandTimeout = 600
Dim i As Integer = 0
For i = 0 To lstRptPara.Items.Count - 2
cmd.Parameters.Add(lstRptPara.Items(i).Text, lstRptPara.Items(i).Value)
Next i
Dim adp As New SqlDataAdapter(cmd)
Dim ds As New DataSet
Try '当SP执行错误时,转入NoRecord.aspx画面,然后再转入原报表输入画面.
adp.Fill(ds, "dsTable") '生成dataSet
Catch ex As Exception
'Response.Write("SP执行错误")
'Response.End()
ReportDoc.Close()
cn.Close()
Rurl = Right(Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString, Len(Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString) - Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString.LastIndexOf("/") - 1).ToUpper()
'此处增加调试部分
Response.Write("SP执行错误")
Response.End()
Response.Redirect("NoRecord.aspx?NextPage=" + Rurl)
End Try
If ds.Tables(0).Rows.Count = 0 Then '如果没能查询到记录,将页面返回NoRecord.aspx,然后再返回原报表输入画面.
ReportDoc.Close()
cn.Close()
Rurl = Right(Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString, Len(Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString) - Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString.LastIndexOf("/") - 1).ToUpper()
Response.Redirect("NoRecord.aspx?NextPage=" + Rurl)
End If
ReportDoc.Load(GetReportName(RptName))
ReportDoc.SetDatabaseLogon(userid, password, servername, databasename)
ReportDoc.SetDataSource(ds.Tables(0).DefaultView)
For i = 0 To lstRptPara.Items.Count - 2
ReportDoc.SetParameterValue(lstRptPara.Items(i).Text, lstRptPara.Items(i).Value)
Next
CrystalReportViewer1.ReportSource = ReportDoc
cn.Close()
Dim lstRptPara As New DropDownList
Dim ReportDoc As New ReportDocument
Dim cn As SqlConnection
lstRptPara = Session("lstRptPara")
Dim SpName As String = lstRptPara.Items(lstRptPara.Items.Count - 1).Text
Dim RptName As String = "report/" + lstRptPara.Items(lstRptPara.Items.Count - 1).Value
cn = New SqlConnection("Server=" & servername & ";database=" & databasename & ";uid=" & userid & ";pwd=" & password)
Dim cmd As New SqlCommand(SpName, cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandTimeout = 600
Dim i As Integer = 0
For i = 0 To lstRptPara.Items.Count - 2
cmd.Parameters.Add(lstRptPara.Items(i).Text, lstRptPara.Items(i).Value)
Next i
Dim adp As New SqlDataAdapter(cmd)
Dim ds As New DataSet
Try '当SP执行错误时,转入NoRecord.aspx画面,然后再转入原报表输入画面.
adp.Fill(ds, "dsTable") '生成dataSet
Catch ex As Exception
'Response.Write("SP执行错误")
'Response.End()
ReportDoc.Close()
cn.Close()
Rurl = Right(Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString, Len(Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString) - Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString.LastIndexOf("/") - 1).ToUpper()
'此处增加调试部分
Response.Write("SP执行错误")
Response.End()
Response.Redirect("NoRecord.aspx?NextPage=" + Rurl)
End Try
If ds.Tables(0).Rows.Count = 0 Then '如果没能查询到记录,将页面返回NoRecord.aspx,然后再返回原报表输入画面.
ReportDoc.Close()
cn.Close()
Rurl = Right(Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString, Len(Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString) - Request.UrlReferrer.GetLeftPart(UriPartial.Path).ToString.LastIndexOf("/") - 1).ToUpper()
Response.Redirect("NoRecord.aspx?NextPage=" + Rurl)
End If
ReportDoc.Load(GetReportName(RptName))
ReportDoc.SetDatabaseLogon(userid, password, servername, databasename)
ReportDoc.SetDataSource(ds.Tables(0).DefaultView)
For i = 0 To lstRptPara.Items.Count - 2
ReportDoc.SetParameterValue(lstRptPara.Items(i).Text, lstRptPara.Items(i).Value)
Next
CrystalReportViewer1.ReportSource = ReportDoc
cn.Close()
浙公网安备 33010602011771号