生成报告会导致未处理的类型' system.stackoverflowexception'发生在system.windows.forms.dll中

时间:2014-03-20 03:06:40

标签: c# winforms visual-studio-2012 crystal-reports

我在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();
    }
}

当我开始运行VS 2012时,Form4是一个负载。

我也尝试使用DataSet,但它有相同的错误。使用DataSet的代码:

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();

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

  1. InitializeComponent来电CreateControl
  2. CreateControl提出Load事件
  3. Form4_Load最终调用Refresh,最终调用CreateControl
  4. 此时,步骤2和3相互相互递归并最终导致堆栈溢出异常。要解决此问题,只需将代码从Form4_Load方法移到构造函数中的InitializeComponent调用之后立即