我有一个带有 ReportViewer 控件的 ASP.NET 页面,该控件显示由 GET 参数指定的 SSRS 报告。我正在隐藏 ReportViewer 的 ParameterHeader 并使用 ListBox 和 CalendarExtender 等控件在 ASP.net 页面上自己显示参数(我这样做是因为不是每个人都可以查看所有内容,并且我想控制选择的报告参数显示哪些部分)。
参数的数量/类型因报告而异,因此我将<asp:Repeater>
数据绑定到报告的参数(我使用ServerReport.GetParameters()
),然后动态创建下拉/文本框/日历控件并将它们添加到ParameterEntryPlaceholder
in ReportParameterEditRepeater_ItemDataBound
.
<table><tr>
<td>
<asp:Repeater ID="ReportParameterEditRepeater" OnItemDataBound="ReportParameterEditRepeater_ItemDataBound" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<%#Container.ItemIndex % 4 == 0 ? "<tr>" : "" %>
<td><b><%#((ReportParameterInfo)Container.DataItem).Prompt %>: </b></td>
<td><asp:PlaceHolder runat="server" ID="ParameterEntryPlaceholder"></asp:PlaceHolder></td>
<%#Container.ItemIndex % 4 == 3 ? "</tr>" : "<td style='width: 20px;'></td>" %>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
<td>
<asp:UpdatePanel ID="ReportRefreshUpdatePanel" ChildrenAsTriggers="True" runat="server">
<ContentTemplate>
<asp:Button ID="ViewReportBtn" runat="server" OnClick="ViewReportBtn_Click" Text="View Report" />
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr></table>
我的控件旁边有一个<asp:Button>
标记为“查看报告”的方法,它启动了一个方法,该方法旨在收集所有参数控件的值,在 ServerReport 上设置它们,然后异步刷新报告。
但是,在“查看报告”回发期间,我看不到动态创建的控件 - ParameterEntryPlaceholder 为空。如果我重新绑定中继器,我可以看到它们,但如果我这样做,我会丢失用户的选择。
TL;DR - 如何在页面加载期间、回发期间访问我从代码后面创建/添加到表单的控件,而无需重新绑定?