ASP.NET アプリケーションのデータ キャッシュとチャート コントロールに関連する問題を解決するための支援が必要です。チャート コントロールを含む簡単なテスト ページがあります。チャートはデータベースのデータを使用するため、チャートに必要なすべてのデータを含む chartData というカスタム オブジェクトを作成しました。chartData をゼロから作成すると (キャッシュにないため)、チャートは正しくレンダリングされます。キャッシュから chartData を取得すると、以下の例外が発生します。キャッシュから返されたオブジェクトをデバッガーで調べたところ、正しいように見えます。ここで何が起こっているかについて何か提案はありますか?
これは私の開発システム (Win 7、VS 2010、C#) で発生しています。
チャートのデータソースに関連しているように見えるので、データソースのプロパティに影響を与える私のコードの行は次のとおりです。
myChart.DataSource = myChartData.DataSource;
myChartData.DataSource は、myChartDataPoint が存在する myChartDataPoint のリストです。
public class myChartDataPoint
{
public int X { get; set; }
public int Y1 { get; set; }
public int Y2 { get; set; }
public int Y3 { get; set; }
}
「/」アプリケーションでサーバー エラーが発生しました。
オブジェクト参照がオブジェクト インスタンスに設定されていません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。
ソース エラー:
現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。
スタックトレース:
[NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。] System.Web.UI.DataVisualization.Charting.ChartImage.DataBind(IEnumerable dataSource, ArrayList seriesList) +451 System.Web.UI.DataVisualization.Charting.Chart.PerformDataBinding (IEnumerable データ) +14 System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable データ) +128 System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 引数、DataSourceViewSelectCallback コールバック) +33 System.Web.UI.WebControls.DataBoundControl .PerformSelect() +143 System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74 System.Web.UI.DataVisualization.Charting.ChartPicture.Paint(Graphics グラフ、Boolean paintTopLevelElementOnly) +400 System.Web.UI.DataVisualization .Charting.ChartImage.GetImage(単一解像度) +1035 System.Web.UI.DataVisualization.Charting.Chart.SaveImage(ストリーム imageStream) +124 System.Web.UI.DataVisualization.Charting.Chart.Render(HtmlTextWriter ライター) +375 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter ライター、ControlAdapter アダプター) +27 System.Web.UI.Control.RenderControl(HtmlTextWriter ライター、ControlAdapter アダプター) +100 System.Web.UI.Control.RenderControl(HtmlTextWriter ライター) +25 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter ライター、ICollection の子) ) +208 System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter ライター) +173 System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter ライター) +31 System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter)出力) +53 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter ライター、ControlAdapter アダプター) +27 システム。Web.UI.Control.RenderControl(HtmlTextWriter ライター、ControlAdapter アダプター) +100 System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter ライター) +40 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter ライター、ICollection 子) + 208 System.Web.UI.Control.RenderChildren(HtmlTextWriter ライター) +8 System.Web.UI.Page.Render(HtmlTextWriter ライター) +29 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter ライター、ControlAdapter アダプター) +27 システム.Web.UI.Control.RenderControl(HtmlTextWriter ライター、ControlAdapter アダプター) +100 System.Web.UI.Control.RenderControl(HtmlTextWriter ライター) +25 System.Web.UI.Page.ProcessRequestMain(ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +3060HtmlControls.HtmlForm.RenderControl(HtmlTextWriter ライター) +40 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter ライター、ICollection の子) +208 System.Web.UI.Control.RenderChildren(HtmlTextWriter ライター) +8 System.Web.UI. Page.Render(HtmlTextWriter ライター) +29 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter ライター、ControlAdapter アダプター) +27 System.Web.UI.Control.RenderControl(HtmlTextWriter ライター、ControlAdapter アダプター) +100 System.Web.UI .Control.RenderControl(HtmlTextWriter ライター) +25 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3060HtmlControls.HtmlForm.RenderControl(HtmlTextWriter ライター) +40 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter ライター、ICollection の子) +208 System.Web.UI.Control.RenderChildren(HtmlTextWriter ライター) +8 System.Web.UI. Page.Render(HtmlTextWriter ライター) +29 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter ライター、ControlAdapter アダプター) +27 System.Web.UI.Control.RenderControl(HtmlTextWriter ライター、ControlAdapter アダプター) +100 System.Web.UI .Control.RenderControl(HtmlTextWriter ライター) +25 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3060RenderChildren(HtmlTextWriter ライター) +8 System.Web.UI.Page.Render(HtmlTextWriter ライター) +29 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter ライター、ControlAdapter アダプター) +27 System.Web.UI.Control.RenderControl( HtmlTextWriter ライター、ControlAdapter アダプター) +100 System.Web.UI.Control.RenderControl(HtmlTextWriter ライター) +25 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint、Boolean includeStagesAfterAsyncPoint) +3060RenderChildren(HtmlTextWriter ライター) +8 System.Web.UI.Page.Render(HtmlTextWriter ライター) +29 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter ライター、ControlAdapter アダプター) +27 System.Web.UI.Control.RenderControl( HtmlTextWriter ライター、ControlAdapter アダプター) +100 System.Web.UI.Control.RenderControl(HtmlTextWriter ライター) +25 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint、Boolean includeStagesAfterAsyncPoint) +3060ProcessRequestMain (ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +3060ProcessRequestMain (ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +3060
バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.272
/// <summary>
/// Spline Chart Data
/// </summary>
public class ChartData
{
private SeriesList _seriesList = new SeriesList();
private ChartDataPoint3YList _dataSource = new ChartDataPoint3YList();
private StringList _legendTextList = new StringList();
private StringList _axisXLabelList = new StringList();
/// <summary>
/// Chart Title
/// </summary>
public string ChartTitle { get; set; }
/// <summary>
/// X axis title
/// </summary>
public string AxisXTitle { get; set; }
/// <summary>
/// Y axis title
/// </summary>
public string AxisYTitle { get; set; }
/// <summary>
/// X Axis point label strings.
/// </summary>
public StringList AxisXLabelList
{
get { return _axisXLabelList; }
set { _axisXLabelList = value; }
}
/// <summary>
/// Legend strings.
/// </summary>
public StringList LegendTextList
{
get { return _legendTextList; }
set { _legendTextList = value; }
}
/// <summary>
/// Datasource to be used by the chart, contains data for all chart data points
/// </summary>
public ChartDataPoint3YList DataSource
{
get { return _dataSource; }
set { _dataSource = value; }
}
/// <summary>
/// Chart series collection
/// </summary>
public SeriesList SeriesList
{
get { return _seriesList; }
set { _seriesList = value; }
}
/// <summary>
/// Chart data specific to one chart series
/// </summary>
public class ChartSeriesData
{
/// <summary>
/// Legend text for the series
/// </summary>
public string Legend { get; set; }
/// <summary>
/// Data Points of the series
/// </summary>
public ChartDataPoint3YList DataPoints { get; set; }
}
}
public class ChartDataPoint3YList : List<ChartDataPoint3Y> { }
public class ChartDataPoint3Y
{
public int X { get; set; }
public int Y1 { get; set; }
public int Y2 { get; set; }
public int Y3 { get; set; }
}
これを機能させました。私にはわからないので、誰かがなぜこれが修正されたのか教えてくれるかもしれません。置き換えた後、例外はなくなりました
foreach (Series series in chartData.SeriesList) myChart.Series.Add(series);
と
foreach (Series series in chartData.SeriesList)
{
SeriesItem newItem = new Series();
newItem … set the item properties using the relevant values from series
…
myChart.Series.Add(newItem);
}
明らかな違いは、チャート オブジェクトがキャッシュされた chartData.SeriesList を参照しなくなったことです。なぜそれが違いを生んだのか分かりません。