【问题标题】:Rendering Dundas Chart Programatically throwing Exception以编程方式渲染 Dundas 图表抛出异常
【发布时间】:2012-06-04 10:18:15
【问题描述】:

我正在制作一个应用程序,该应用程序在加载 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(); 时,它会抛出异常并带有以下堆栈跟踪

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 文件时自动完成的。但我找不到这到底是什么?

【问题讨论】:

  • 缺少的是页面步骤,例如 preinit、init、pageload 等。在此步骤中,此图表进行初始化和其他需要运行的内容。
  • @Aristos,函数 GetSummaryGraph() 正在从 Page_Load 调用
  • 同样的问题。您找到解决方案了吗?

标签: asp.net charts code-behind dundas


【解决方案1】:

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

您还可以将图表控件运行到字符串中,而不是直接在页面上。

考虑两个想法。

Ether 尝试获取当前图像 url 渲染控件后,你不需要它,因为控件会自动运行到内存中,你会得到你必须放置在点在您的页面上。

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

【讨论】:

  • 感谢您的建议,其实我也有同样的想法,并尝试在获取 imageurl 之前调用RenderControl,但 RenderControl 也会抛出异常。我已经相应地更新了问题,看看
  • 感谢您的建议,我使用了具有相同技术的 ASP.NET 图表,它们工作正常。