渲染Dundas Chart以编程方式抛出异常

时间:2012-06-04 10:18:16

标签: asp.net charts code-behind dundas

我正在创建一个应用程序,它在加载ASP.NET页面时要渲染相当重的(在数据意义上)图表,因为这个页面需要花费很多时间来加载并显示白屏。我正在为我的图表使用Dundas图表API。

作为一种解决方法,我试图在Ajax调用中加载图表。在这种方法中,我立即渲染整个页面,一旦渲染,我向服务器发送一个Ajax调用以进行图表控制。

要渲染图表控件,我使用以下代码

private string GetSummaryGraph()
    {
        Chart chart_analysis = new Chart();
        chart_analysis.ID = "chart_analysis_1";
        chart_analysis.BackColor = Color.Black;
        chart_analysis.EnableViewState = true;
        chart_analysis.Height = 217;
        chart_analysis.ImageStorageMode = ImageStorageMode.UseImageUrl;
        chart_analysis.ImageUrl = "~/MyApp/ChartImages/MyChart_#SEQ(1000,720)";
        chart_analysis.ImageType = ChartImageType.Png;
        chart_analysis.Palette = ChartColorPalette.Dundas;
        chart_analysis.ViewStateContent = SerializationContent.All;
        chart_analysis.Width = 996;

        // Set all styling here, like ChartAreas, Series.

        string chartImgURL = chart_analysis.GetCurrentImageUrl(); // this line throws exception "Object reference not set to instance of object"

        string html_chart = "";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        chart_analysis.RenderControl(htw);

        html_chart = sw.ToString();
        return html_chart;
}

由于某种原因,当我调用函数chart_analysis.GetCurrentImageUrl();时,它会抛出以下stacktrace

的异常
Object reference not set to an instance of an object.
at Dundas.Charting.WebControl.Chart.a(String )
   at Dundas.Charting.WebControl.Chart.GetCurrentImageUrl()
   at GetSummary.GetSummaryGraph() in D:\Projects\MyApp\GetSummary.aspx.cs:line 4492

但是,如果我将图表控件放在.aspx页面而不是.aspx.cs文件中,则此功能正常。

修改

我还尝试在调用GetCurrentImageURL()之前呈现控件,在这种情况下我也得到以下异常。

Object reference not set to an instance of an object.
   at Dundas.Charting.WebControl.Chart.a(String )
   at Dundas.Charting.WebControl.Chart.GetCurrentImageUrl()
   at Dundas.Charting.WebControl.Chart.Render(HtmlTextWriter output)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at GetSummary.GetSummaryGraph() in D:\Projects\MyApp\GetSummary.aspx:line 4494
   at GetSummary.LoadChartData() in D:\Projects\MyApp\GetSummary.aspx:line 4378

看起来我缺少一些初始化,当图表放在.aspx文件中时会自动完成。但我无法找到这究竟是什么?

1 个答案:

答案 0 :(得分:1)

您收到此错误,因为当时您要求它尚未运行图表控件。

此外,您将图表控件运行为字符串,而不是直接在页面上。

考虑两个人的想法。

Ether尝试在渲染控件后获取当前图像URL ,以太简单不需要它,因为控件会自动运行到内存中,并且您获得必须放置在html上的html指向您的页面。

在任何情况下,您都需要运行控制步骤以使其参数可用。