Charts 在diff detailreports中显示包含脚本和图表的子报表的xtrareport会损坏图表

Charts 在diff detailreports中显示包含脚本和图表的子报表的xtrareport会损坏图表,charts,devexpress,xtrareport,subreports,Charts,Devexpress,Xtrareport,Subreports,我有一份报告显示了一系列测试。测试报告实际上是另一个xtrareport,在收集报告中显示为子报告。在这些测试报告中,可以有多个子测试和。对于每个子测试,都有一个在脚本中创建的图表。 这是为子测试创建图形的脚本: private void xrChart1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { XRChart chrt = (XRChart)sender; XYDiagram

我有一份报告显示了一系列测试。测试报告实际上是另一个xtrareport,在收集报告中显示为子报告。在这些测试报告中,可以有多个子测试和。对于每个子测试,都有一个在脚本中创建的图表。 这是为子测试创建图形的脚本:

private void xrChart1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) 
{
    XRChart chrt = (XRChart)sender;
    XYDiagram axis = (XYDiagram)chrt.Diagram;
    if (chrt.Series.Count > 0)
    {
        while (chrt.Series[0].View is ScatterLineSeriesView)
        {
            chrt.Series.RemoveAt(0);
        }
    }
    Series standardSeries = chrt.Series[0];
    Series allBottleSeries = chrt.Series[1];
      var curColVal = this.DetailReport1.GetCurrentColumnValue("ShowCurve");
      if (curColVal == null)
    {
        return;
    }
    chrt.BeginInit();
    chrt.Visible = (bool)curColVal;
    if (chrt.Visible)
    {
        List<TSegment> segments = (List<TSegment>)this.DetailReport1.GetCurrentColumnValue("Segments");
        if (segments != null)
        {
            foreach (TSegment segment in segments)
            {
                Series tempSeries = new Series();
                ScatterLineSeriesView tempscatterLineSeriesView = new ScatterLineSeriesView();
                tempscatterLineSeriesView.LineMarkerOptions.BorderVisible = false;
                tempscatterLineSeriesView.MarkerVisibility = DefaultBoolean.False;
                tempscatterLineSeriesView.LineStyle.Thickness = segment.Thickness;
                tempscatterLineSeriesView.Color = segment.SegmentColor;
                tempSeries.LabelsVisibility = DefaultBoolean.False;
                tempSeries.View = tempscatterLineSeriesView;
                tempSeries.ShowInLegend = false;
                tempSeries.ArgumentDataMember = "X";
                tempSeries.ArgumentScaleType = ScaleType.Numerical;
                tempSeries.ValueDataMembersSerializable = "Y";
                tempSeries.DataSource = segment.Points;
                chrt.Series.Insert(0, tempSeries);
            }
        }
        standardSeries.ValueDataMembers[0] = "ODValue";
        standardSeries.ArgumentDataMember = "ConcentrationValue";
        standardSeries.DataSource = this.DetailReport1.GetCurrentColumnValue("Standards");
        allBottleSeries.ValueDataMembers[0] = "Y";
        allBottleSeries.ArgumentDataMember = "X";
        allBottleSeries.DataSource = this.DetailReport1.GetCurrentColumnValue("BottlePoints");
        axis.AxisX.Logarithmic = (bool)this.DetailReport1.GetCurrentColumnValue("XPlotIsLog");
        axis.AxisX.LogarithmicBase = (double)this.DetailReport1.GetCurrentColumnValue("LogarithmicBase");
        axis.AxisX.Title.Text = (string)this.DetailReport1.GetCurrentColumnValue("UnitsOfConcentration");
        axis.AxisX.Label.NumericOptions.Format = NumericFormat.Number;
        axis.AxisX.Label.NumericOptions.Precision = (int)this.DetailReport1.GetCurrentColumnValue("NumberOfDigitsInResults");
        axis.AxisY.Label.NumericOptions.Format = NumericFormat.Number;
        axis.AxisY.Label.NumericOptions.Precision = (int)this.DetailReport1.GetCurrentColumnValue("NumberOfDigitsInMeasuredValues");
        axis.AxisY.Logarithmic = (bool)this.DetailReport1.GetCurrentColumnValue("YPlotIsLog");
        axis.AxisY.LogarithmicBase = axis.AxisX.LogarithmicBase;
            axis.AxisY.Title.Text = (string)this.DetailReport1.GetCurrentColumnValue("UnitsOfStandardsInput");
        axis.AxisY.WholeRange.AlwaysShowZeroLevel = !(bool)this.DetailReport1.GetCurrentColumnValue("ODAxisShouldNotStartAtZero");
    }
    chrt.EndInit();

}

有人知道这里发生了什么吗?

找到了这个问题的答案。 它实际上与脚本无关。 我们将集合报告绑定到的对象有一个名为TestXtrareports的属性,它是XtraReport的列表。 创建此对象时,在将其添加到TestXtraReports之前,我们在XtraReport上调用了CreateDocument。 这就是导致这个错误的原因。在TestXtraReports中删除XtraReports的createDocument语句就解决了这个问题。
CreateDocument仍在收集报告上被调用。

找到了此问题的答案。 它实际上与脚本无关。 我们将集合报告绑定到的对象有一个名为TestXtrareports的属性,它是XtraReport的列表。 创建此对象时,在将其添加到TestXtraReports之前,我们在XtraReport上调用了CreateDocument。 这就是导致这个错误的原因。在TestXtraReports中删除XtraReports的createDocument语句就解决了这个问题。 仍然在收集报告上调用CreateDocument

private void Detail1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) 
{
    ((XRSubreport)sender).ReportSource = this.DetailReport.GetCurrentRow() as XtraReport;
}