【发布时间】:2012-11-20 15:09:55
【问题描述】:
我正在尝试使用 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());
}
所以我认为通过在 UpdatePanel 之外定义我的 ReportViewer,UpdatePanel 会重新绘制自身,但页面的其余部分不会得到更新。但是,每次计时器滴答作响时,它都会重新绘制报告。这很烦人,因为如果您在报表上打开日历控件,它会关闭它。目前出于测试目的,计时器每三秒滴答一次,这是不现实的,但我仍然不希望在用户尝试使用它时重新绘制报告控件,而不管时间间隔如何。有什么想法吗?
【问题讨论】:
-
如果是我,我会用 jquery 或纯 javascript 之类的东西将计时器移到客户端。 (而不是在服务器上进行)。如果可能的话,它将解决您的问题,并且在我看来效率更高。
标签: asp.net visual-studio-2010 reporting-services