0

GET パラメータで指定された SSRS レポートを表示する ReportViewer コントロールを含む ASP.NET ページがあります。ReportViewer の ParameterHeader を非表示にし、ListBox や CalendarExtender などのコントロールを使用して ASP.net ページにパラメーターを表示しています (すべての人がすべてを表示できるわけではなく、選択するレポート パラメーターを制御したいため、これを行っています)。どの部分が表示されますか)。

パラメーターの数/タイプはレポートによって異なるため<asp:Repeater>、レポートのパラメーター (を使用して取得) にデータ バインドしServerReport.GetParameters()、ドロップダウン/テキスト ボックス/カレンダー コントロールを動的に作成してParameterEntryPlaceholderin に追加します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 - ページのロード中、ポストバック中に、再バインドせずにコード ビハインドからフォームに作成/追加したコントロールにアクセスするにはどうすればよいですか?

4

1 に答える 1

2

何をするにしても、コントロールを表示するには再バインドする必要があります。あなたが抱えている問題は、ページのライフサイクルで再バインドを行っているときです

ポストバック中、OnInit ページ イベント中に動的に追加されたコントロールを再バインドする必要があります。これにより、ViewState を復元できます。

于 2013-02-14T16:00:56.120 に答える