我有一个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事件。基本上,每次输入更改时,报表都会刷新。
这是例外:
请注意,报告现在只有2个参数,并且都已设置。无需数据源。
为什么 有时 :
我的想法是reportViewer.RefreshReport()在内部是异步的,当在completation之前触发事件时,它将导致异常。
您可能感兴趣的其他事项:
调试变得很糟糕,有什么建议吗?感谢
答案 0 :(得分:0)
在花费一些时间来解决这个问题之后,当用户改变一些输入时,我“解决”了这个更新数据结构(字典),并且只有当某些东西使用计时器刷新报告时改变了。
看起来250ms是计时器的合理间隔。
丑陋......但是它有效并且问题变得令人沮丧。