生成报告会导致 system.windows.forms.dll 中发生类型为“system.stackoverflow
本文关键字:system 类型 stackoverflow forms 报告会 windows dll | 更新日期: 2023-09-27 17:51:05
我正在Visual Studio 2012中创建水晶报告,但不断收到错误
an unhandled exception of type 'system.stackoverflowexception' occurred in system.windows.forms.dll
这是我的表单 4 代码:
public partial class Form4 : Form
{
public Form4()
{
InitializeComponent();
}
private void Form4_Load(object sender, EventArgs e)
{
CrystalReport1 r = new CrystalReport1();
maintenance_productDataSetTableAdapters.COLOR_TYPETableAdapter ta = new EBL.maintenance_productDataSetTableAdapters.COLOR_TYPETableAdapter();
maintenance_productDataSet.COLOR_TYPEDataTable table = ta.GetData();
r.SetDataSource(table.DefaultView);
crystalReportViewer1.ReportSource = r;
crystalReportViewer1.Refresh();
}
}
Form4 当我开始运行 VS 2012 时加载一次。
我也尝试使用数据集,但它有同样的错误。使用数据集的代码:
CrystalReport1 rep = new CrystalReport1();
DataSet1TableAdapters.COLOR_TYPETableAdapter ta = new Weeak.DataSet1TableAdapters.COLOR_TYPETableAdapter();
DataSet1.COLOR_TYPEDataTable table = ta.GetData();
rep.SetDataSource(table.DefaultView);
crystalReportViewer1.ReportSource = rep;
crystalReportViewer1.Refresh();
由于 Crystal Report 是使用早期版本的 .NET Framework 开发的,因此需要将以下行添加到app.config
文件中:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
这里可能发生的是以下事件正在发生
-
InitializeComponent
呼叫CreateControl
-
CreateControl
引发Load
事件 -
Form4_Load
最终打电话给Refresh
,最终打电话给CreateControl
此时,步骤 2 和 3 相互递归,最终导致堆栈溢出异常。 要解决此问题,只需将代码从 Form4_Load
方法移动到构造函数中InitializeComponent
调用之后