2013-02-14 40 views
0

我有一個帶有ReportViewer控件的ASP.NET頁面,該控件顯示由GET參數指定的SSRS報告。我隱藏了ReportViewer的ParameterHeader,並使用ListBox和CalendarExtender等控件在ASP.net頁面上顯示自己的參數(我這樣做是因爲不是每個人都可以看到所有內容,而且我想控制選擇的報表參數哪些部分被顯示)。在回發期間訪問中繼器內的動態創建的控件

數量/類型參數的報表之間變化,所以我有一個<asp:Repeater>數據綁定到報表的參數(這是我開始使用ServerReport.GetParameters()),我創建動態下拉/文本/日曆控件,並將它們添加到ParameterEntryPlaceholderReportParameterEditRepeater_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> 

有標有「查看報告」我旁邊的控制,揭開序幕,是爲了收集所有的參數控制值的方法,設置它們的ServerReport的,然後刷新報告異步。

但是,在我的「查看報告」回發期間,我看不到動態創建的控件 - ParameterEntryPlaceholder爲空。如果我重新綁定中繼器,我可以看到它們,但如果我這樣做,則會丟失用戶的選擇。

TL; DR-如何在頁面加載過程中,回發過程中,無需重新綁定,如何訪問我創建/添加到窗體的控件?

回答

2

無論你做什麼,你需要來重新綁定看到的控件。你正在做的問題是在頁面的生命週期中,你正在重新綁定。

在回發期間,您需要在OnInit頁面事件期間重新綁定動態添加的控件。這將允許ViewState被恢復。

+0

在控件上使用EnableViewState = true執行此操作,我可以看到控件並訪問用戶(非默認)輸入。非常感謝! – Chris 2013-02-14 16:09:04

相關問題