asp.net を使用して vs2010 でレポート ホストを作成しようとしています。Web 開発を試みたのはこれが初めてなので、非常に明らかな間違いを犯している可能性があります。最終的な目標は、ユーザーにレポートを表示するだけでなく、ユーザーがレポートを閲覧している時間を追跡するホストです。ただし、タイマーが刻むたびにレポートが再描画されるというこの厄介な問題を回避することはできません。
私は UsageAuditor コントロールを持っています。これは、タイマーとラベルを含む単なる更新パネルです。
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Timer runat="server" ID="Timer1" Interval="3000" OnTick="Timer1_Tick"/>
<asp:Label ID="lblTime" runat="server" Text="Not updated yet"></asp:Label>
</ContentTemplate>
次に、レポート シェルでそのコントロールを使用します。
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<uc1:UsageAuditor ID="ua1" runat="server" />
<rsweb:reportviewer ID="reportViewer" runat="server" Font-Names="Verdana"
Font-Size="8pt" InteractiveDeviceInfos="(Collection)" ProcessingMode="Remote"
WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt"
Height="800px" Width="1000px" AsyncRendering="True">
</rsweb:reportviewer>
</form>
</body>
そして、タイマーティックは単にラベルを更新します:
protected void Timer1_Tick(object sender, EventArgs e)
{
lblTime.Text = String.Format("Updated at {0}", DateTime.Now.ToString());
}
そのため、ReportViewer を UpdatePanel の外で定義すると、UpdatePanel は自分自身を再描画すると考えましたが、ページの残りの部分は更新されません。ただし、タイマーが作動するたびに、レポートが再描画されます。レポートでカレンダー コントロールを開いていると閉じてしまうので、非常に面倒です。現在、テスト目的で、タイマーは 3 秒ごとに刻みますが、これは現実的ではありませんが、間隔に関係なく、ユーザーが使用しようとしているときにレポート コントロールが再描画されることは望ましくありません。何か案は?