Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 计时器滴答作响时停止Reportviewer刷新_Asp.net_Visual Studio 2010_Reporting Services - Fatal编程技术网

Asp.net 计时器滴答作响时停止Reportviewer刷新

Asp.net 计时器滴答作响时停止Reportviewer刷新,asp.net,visual-studio-2010,reporting-services,Asp.net,Visual Studio 2010,Reporting Services,我正在尝试使用asp.net在vs2010中创建报表主机。这是我第一次尝试做web开发,所以我可能犯了一个非常明显的错误。最终目标是一台主机,它不仅向用户显示报告,还跟踪用户查看报告的时间。然而,我无法克服这个恼人的问题,即每当我的计时器滴答作响时,报告就会被重新绘制 我有一个UsageAuditor控件,它只是一个带有计时器和标签的更新面板: <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate

我正在尝试使用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>

因此,我认为通过在UpdatePanel之外定义ReportViewer,UpdatePanel将重新绘制自己,但页面的其余部分不会得到更新。但是,每次计时器计时,它都会重新绘制报告。这很烦人,因为如果在报表上打开日历控件,它会将其关闭。目前,出于测试目的,计时器每三秒滴答响一次,这是不现实的,但我仍然不希望在用户尝试使用报表控件时,不管时间间隔如何,报表控件都会被重新绘制。有什么想法吗?

我发现一篇帖子说:

由于报表查看器使用脚本的方式,它当前与UpdatePanel不兼容。我们意识到了这个问题,并研究了必要的更改,以使ReportViewer在UpdatePanel中工作。但目前还没有解决办法。虽然在这种情况下,您似乎可以使用简单的报表,但一些更微妙的报表查看器行为仍将被破坏,例如,当浏览器窗口保持打开状态时,它的代码使报表会话保持活动状态

在阅读了puddleglums的建议后,我思考了为什么我觉得需要使用计时器来更新我的使用信息。如果我能捕捉到用户离开页面的时间,那么我真的没有必要每隔一段时间更新页面

下面,我添加了一些java脚本,以便在关闭时调用服务器端函数:

<script type="text/javascript">
    //<![CDATA[
    function HandleClose() {
        var QAid = document.getElementById('QAReportRequest');
        PageMethods.SetReportViewEndTime(QAid.value);
    }
    //]]> 
</script>

如果是我,我会用jquery或纯javascript之类的东西将计时器移动到客户端。(而不是在服务器上执行)。如果这是可能的,它将解决您的问题,并在我看来更有效。
protected void Timer1_Tick(object sender, EventArgs e)
{
    lblTime.Text = String.Format("Updated at {0}", DateTime.Now.ToString());
}
<script type="text/javascript">
    //<![CDATA[
    function HandleClose() {
        var QAid = document.getElementById('QAReportRequest');
        PageMethods.SetReportViewEndTime(QAid.value);
    }
    //]]> 
</script>
<body onunload="HandleClose()">
  <form id="form1" runat="server">
  <input id="QAReportRequest" type="hidden" runat="server"/>
  <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"/>
  <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">
  </rsweb:reportviewer>          
  </form>
</body>
    [WebMethod]
    public static void SetReportViewEndTime(string ID)
    {
        QAReportingManager manager = new QAReportingManager();
        QAReportUsageResponse element = manager.GetQAReportUsage(long.Parse(ID));
        QAReportUsageRequest request = new QAReportUsageRequest
        {
            ID = element.ID,
            userID = element.userID,
            userName = element.userName,
            reportName = element.reportName,
            startTime = element.startTime,
            endTime = DateTime.Now,
            department = "Unknown"
        };
        manager.SaveQAReportUsage(request);
    }