【发布时间】:2014-04-08 21:45:16
【问题描述】:
我编写了一个简单的 webForm,其中包含 1 个文本框和一个 ReportViewer(由 Reoprt Wizard 创建)。尝试执行报告时我没有收到任何错误,但报告永远不会停止加载。我已经仔细检查了 .rdlc 文件(通过预览 .xsd 文件并显示了预期的数据。因此,我在后面的代码中设置了一个断点,以查看是否可以识别问题。不知何故,代码成功完成并刷新 ReportViewer 代码,然后进入 Designer.vb 文件运行 4 个函数,然后再次返回 ReportViewer 代码。我不明白 Designer.vb 代码中发生了什么。有人可以帮我理解什么我做错了吗?我将在后面包含 ASP.net、vb 代码以及 Designer.vb 文件中的 4 块代码。
ASP.net 代码:
<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/HRMaster.Master" CodeBehind="VacationSick_EmployeeReportByArea.aspx.vb" Inherits="CEI_PerformanceReviews.VacationSick_EmployeeReportByArea" %>
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="HRPlaceHolder" runat="server">
<asp:Label ID="Label2" runat="server" style="z-index: 1; left: 74px; top: 215px; position: absolute" Text="Year:"></asp:Label>
<p>
</p>
<asp:DropDownList ID="ddl_Year" runat="server" DataSourceID="YearChooser" DataTextField="PeriodYYYY" DataValueField="PeriodYYYY" style="z-index: 1; left: 129px; top: 214px; position: absolute">
</asp:DropDownList>
<asp:SqlDataSource ID="YearChooser" runat="server" ConnectionString="<%$ ConnectionStrings:CafeWorksConnectionString %>" SelectCommand="SELECT DISTINCT PeriodYYYY
FROM Ted.CafeWorks.dbo.FatzPeriodDates
WHERE PeriodYYYY >= (DATEPART(YEAR, GetDate())-2)
ORDER BY PeriodYYYY DESC"></asp:SqlDataSource>
<asp:Button ID="btn_Refresh" runat="server" style="z-index: 1; left: 269px; top: 212px; position: absolute" Text="Refresh" />
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:Label ID="Label3" runat="server" Font-Bold="True" Font-Size="XX-Large" ForeColor="#000099" style="z-index: 1; left: 0px; top: 142px; position: absolute; width: 1179px; text-align: center" Text="Employee Vacation/Sick Days by Area Report"></asp:Label>
<rsweb:ReportViewer ID="rv_EmployeeReportByArea" runat="server" Font-Names="Verdana" Font-Size="8pt" style="z-index: 1; left: 29px; top: 280px; position: absolute; height: 400px; width: 710px" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt">
<LocalReport ReportEmbeddedResource="CEI_PerformanceReviews.VacationSick_ReportByArea.rdlc">
<DataSources>
<rsweb:ReportDataSource DataSourceId="ObjectDataSource2" Name="Dilbert_VacationSickByArea" />
</DataSources>
</LocalReport>
</rsweb:ReportViewer>
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server" SelectMethod="GetData" TypeName="CEI_PerformanceReviews.Dilbert_VacationSickByAreaTableAdapters.VacationSick_CalculationsByAreaProcTableAdapter" OldValuesParameterFormatString="original_{0}">
<SelectParameters>
<asp:ControlParameter ControlID="ddl_Year" DefaultValue="2014" Name="Year" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData" TypeName="CEI_PerformanceReviews.Dilbert_VacationSickByAreaTableAdapters.VacationSick_CalculationsByAreaProcTableAdapter" OldValuesParameterFormatString="original_{0}">
<SelectParameters>
<asp:ControlParameter ControlID="ddl_Year" Name="Year" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
</asp:Content>
背后的VB代码:
Imports Microsoft.Reporting.WebForms
Public Class VacationSick_EmployeeReportByArea
Inherits System.Web.UI.Page
'Declare Variables
Dim Choose_Year As String
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Default the Year in ddl to this year
If (Page.IsPostBack) = False Then
ddl_Year.SelectedValue = Now.Year
End If
'When the page loads, fill the report with the current year's data
Choose_Year = ddl_Year.SelectedValue.ToString()
rv_EmployeeReportByArea.LocalReport.ReportPath = "VacationSick\VacationSick_ReportByArea.rdlc"
Dim Param As New ReportParameter("Year", "2014")
rv_EmployeeReportByArea.LocalReport.SetParameters({Param})
rv_EmployeeReportByArea.ServerReport.Refresh()
End Sub
执行 Dilbert_VacationSickByArea.Designer.vb 文件中的这 4 个代码块,然后返回到 ReportViewer 的 PageLoad 代码:
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")> _
Public Property ClearBeforeFill() As Boolean
Get
Return Me._clearBeforeFill
End Get
Set
Me._clearBeforeFill = value
End Set
End Property
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")> _
Protected Friend ReadOnly Property Adapter() As Global.System.Data.SqlClient.SqlDataAdapter
Get
If (Me._adapter Is Nothing) Then
Me.InitAdapter
End If
Return Me._adapter
End Get
End Property
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")> _
Protected ReadOnly Property CommandCollection() As Global.System.Data.SqlClient.SqlCommand()
Get
If (Me._commandCollection Is Nothing) Then
Me.InitCommandCollection
End If
Return Me._commandCollection
End Get
End Property
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")> _
Protected Friend ReadOnly Property Adapter() As Global.System.Data.SqlClient.SqlDataAdapter
Get
If (Me._adapter Is Nothing) Then
Me.InitAdapter
End If
Return Me._adapter
End Get
End Property
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")> _
Protected Friend ReadOnly Property Adapter() As Global.System.Data.SqlClient.SqlDataAdapter
Get
If (Me._adapter Is Nothing) Then
Me.InitAdapter
End If
Return Me._adapter
End Get
End Property
【问题讨论】:
-
我从 Page_Load 中取出代码并添加了一个按钮来调用完全相同的代码。我在页面加载时收到一个错误,我的报告定义尚未指定,但是当我单击按钮时,报告会完美加载。为什么代码在页面加载时会失败,但在 button_clck 上执行?我希望更多信息可能有助于诊断我的问题,因为我仍然绝望地迷路了。
-
未测试,但我认为 rv_EmployeeReportByArea.ServerReport.Refresh() 没用(您正在使用 LocalReport)。仅在 Not Me.Page.IsPostBack 时尝试打印。
-
你说得对,我将 Refresh() 注释掉了,但没有任何区别,所以我认为它没有任何作用。我将 ReportViewer 代码添加到“If (Page.IsPostBack) = False Then”代码块中,它停止了我的无限循环!谢谢!如果您将此作为答案,我很乐意将其选为“我的答案”。
-
非常感谢。很高兴为您提供帮助!
标签: asp.net vb.net reportviewer