更新LocalReport参数并刷新时,“尚未指定某些参数或凭据” - 仅在快速完成时才会显示 -

时间:2015-04-24 07:34:47

标签: c# .net winforms asynchronous reporting-services

我有一个WinForm(MVP)应用程序,我必须在ReportViewer中显示LocalReport并使用一些textbox / numericUpDown更新它。

LocalReport只需要参数,每个输入都设置一个参数。

这是我在表单中设置LocalReport的代码:

 public LocalReport ReportToShow
    {
        set
        {
            //http://stackoverflow.com/questions/9200308/vs2010-rdlc-c-how-can-i-set-a-localreport-object-to-a-reportviewer
            //assign report Path
            reportViewer.LocalReport.ReportPath = value.ReportPath;

            //get a list of actual parameters in the report, with the value set @ String.Empty
            var newParams = value.GetParameters().Select(t => new ReportParameter(t.Name, String.Empty)).ToList();

            reportViewer.LocalReport.SetParameters(newParams);



            //show the report for the first time
            reportViewer.RefreshReport();
        }
    }

这是 有时 (将在下面解释)导致异常的代码:

private void UpdateParam(String name, String value)
    {
        reportViewer.LocalReport.SetParameters(new[] {new ReportParameter(name, value)});
        reportViewer.LocalReport.Refresh();
    }

此方法绑定到输入的TextChanged / ValueChanged事件。基本上,每次输入更改时,报表都会刷新。

这是例外: Exception

请注意,报告现在只有2个参数,并且都已设置。无需数据源。

为什么 有时

  • 我第一次显示表单时会抛出异常,因为我在programmaticaly中更新了textbox / numericupdown,并且“快速”触发了事件。
  • 当我在同一时间输入2个笔划或甚至当我 快速输入时,抛出异常。
  • 当我在输入中正常输入时,抛出异常

我的想法是reportViewer.RefreshReport()在内部是异步的,当在completation之前触发事件时,它将导致异常。

您可能感兴趣的其他事项:

  • 堆栈追踪: Stack trace, looks like async
  • 即使抛出异常,也会正确呈现报告!

调试变得很糟糕,有什么建议吗?感谢

1 个答案:

答案 0 :(得分:0)

花费一些时间来解决这个问题之后,当用户改变一些输入时,我“解决”了这个更新数据结构(字典),并且只有当某些东西使用计时器刷新报告时改变了。

看起来250ms是计时器的合理间隔。

丑陋......但是它有效并且问题变得令人沮丧。