生成报告会导致 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();

生成报告会导致 system.windows.forms.dll 中发生类型为“system.stackoverflow

由于 Crystal Report 是使用早期版本的 .NET Framework 开发的,因此需要将以下行添加到app.config文件中:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

这里可能发生的是以下事件正在发生

  1. InitializeComponent呼叫CreateControl
  2. CreateControl引发Load事件
  3. Form4_Load最终打电话给Refresh,最终打电话给CreateControl

此时,步骤 2 和 3 相互递归,最终导致堆栈溢出异常。 要解决此问题,只需将代码从 Form4_Load 方法移动到构造函数中InitializeComponent调用之后

相关文章: