我有一个ASP.NET Web应用程序,它在Native模式下的另一台机器上使用SSRS 2008 R2。该应用程序有一个用于在SSRS中创建的生成报告的页面。
我将自己的自定义控件用于报表参数。设置完所有参数后,页面将使用隐藏的ReportViewer控件生成报告。
这是页面布局:
<asp:Repeater ID="rptParameters" runat="server">
<ItemTemplate>
<tr>
<td class="label">
<asp:Literal ID="label" runat="server"/>:
</td>
<td class="control">
<asp:TextBox ID="tbx" runat="server" Visible="false"/>
<my:tsJCalendar ID="calendar" runat="server" GeneratePostback="false" HasValidation="true" ErrorDisplay="None" CompareMessage="Date must be in valid 'mm/dd/yyyy' format!" Visible="false"/>
<asp:RadioButtonList ID="radioList" runat="server" Visible="false"
RepeatDirection="Horizontal" RepeatLayout="Flow">
<asp:ListItem Text="True" Value="1"></asp:ListItem>
<asp:ListItem Text="False" Value="0"></asp:ListItem>
</asp:RadioButtonList>
<asp:DropDownList ID="ddl" runat="server" Visible="false"></asp:DropDownList>
<asp:HiddenField ID="hdnForDdl" runat="server"/>
</td>
<td width="22px"></td>
</ItemTemplate>
<AlternatingItemTemplate>
<td class="label">
<asp:Literal ID="label" runat="server"/>:
</td>
<td class="control">
<asp:TextBox ID="tbx" runat="server" Visible="false"/>
<my:tsJCalendar ID="calendar" runat="server" GeneratePostback="false" HasValidation="True" ErrorDisplay="None" CompareMessage="Date must be in valid 'mm/dd/yyyy' format!" Visible="false"/>
<asp:RadioButtonList ID="radioList" runat="server" Visible="false">
<asp:ListItem Text="True" Value="1"></asp:ListItem>
<asp:ListItem Text="False" Value="0"></asp:ListItem>
</asp:RadioButtonList>
<asp:DropDownList ID="ddl" runat="server" Visible="false"></asp:DropDownList>
<asp:HiddenField ID="hdnForDdl" runat="server"/>
</td>
</tr>
</AlternatingItemTemplate>
</asp:Repeater>
<rsweb:ReportViewer ID="rvReports" runat="server" Width="100%"
ShowReportBody="False" ShowPromptAreaButton="false" ShowWaitControlCancelLink="false"
AsyncRendering="false" Visible="false">
</rsweb:ReportViewer>
<hr />
<asp:Button ID="btnRun" runat="server" Text="Run Report" />
要生成自定义参数控件,我使用转发器并根据报告参数类型显示适当的控件。
我正在使用其ReportingService2005 webservice处理SSRS。例如。在第一页加载时,我使用此代码获取报告参数:
Private Function GetParameterReports(values As ParameterValue()) As ReportParameter()
Dim rs As New ReportingService2005()
rs.Credentials = New MyReportCredentials().NetworkCredentials
Dim forRendering As Boolean = True
Dim historyID As String = Nothing
Dim credentials As DataSourceCredentials() = Nothing
Dim paramInfos As ReportParameter() = rs.GetReportParameters(ReportPath, historyID, forRendering, values, credentials)
Return paramInfos
End Function
'values'参数第一次是Nothing。但是,如果参数依赖于其他参数,我会进行回发,并使用相同的GetParameterReports()方法将报告值传递给报告以获取更新的参数。
所有报告都有一个特殊字段'user_id',它是登录用户的标识符。我必须在代码中手动设置此参数,我尝试使用两种方法:
Dim Values As New List(Of ParameterValue)()
Dim singleUserParameter As New ParameterValue()
With singleUserParameter
.Name = "user_id"
.Value = Security.CurrentUserPeopleID
End With
Values.Add(singleUserParameter)
paramInfos = GetParameterReports(Values.ToArray)
和
Dim userIdParameter As New ReportParameter()
userIdParameter.DefaultValues = New String() {Security.CurrentUserPeopleID.ToString()}
userIdParameter.PromptUser = False
Dim rs As New ReportingService2005()
rs.Credentials = New MyReportCredentials().NetworkCredentials
rs.SetReportParameters(ReportPath, paramInfos)
paramInfos = GetParameterReports(Nothing)
某些报告参数依赖于'user_id',但遗憾的是,在使用传递的'user_id'值调用ReportingService2005.GetReportParameters()之后,依赖参数仍然没有DefaultValues。
在设置报告参数值时,您是否可以帮助了解我是否做错了什么,或者原因在于如何创建SSRS报告?