ASP.NET 차트 컨트롤에 익숙한 경우 차트 개체에는 차트 할 수있는 일련의 데이터 개체 인 일련의 개체가 포함되어 있습니다. 각 시리즈는 동일한 차트에서 다른 방법 (막대 또는 점 또는 선)으로 시각화 할 수 있습니다.ASP.NET 차트 컨트롤 - 동적으로 데이터 포인트 시리즈 추가 및 제거
UI의 Series 목록을 만들고 제거하고 수정하는 데 사용하는 사용자 지정 컨트롤이 있습니다. 버튼을 클릭하면 해당 시리즈를 사용하여 차트가 만들어집니다. 그러나 (동일한 시리즈에서도) 차트를 다시 표시하려고하면 불어서 NullReferenceException을 발생시킵니다.
가 여기에 관련 코드입니다 - 내가 객체 포장 시리즈를 가지고 컨트롤 자체에서
public class DataSeries
{
private Series _series = new Series();
... (bunch of other properties)
public Series Series
{
get { return _series; }
set { _series = value; }
}
}
(I는 일부 사용자 지정이있는 특성을 가지고 있기 때문에), I는 속성으로 이들의 목록을 저장 (I 나는 목록을 유지하기를 원하기 때문에 전용) 비 포스트 백시 객체를 생성 :
private static List<DataSeries> seriesList;
public List<DataSeries> ListOfSeries
{
get { return seriesList; }
set { seriesList = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
seriesList = new List<DataSeries>();
}
}
그럼 내가 그 특성을, 새로운 DataSeries를 추가 제거하고 수정하는 데 사용할 수있는 컨트롤의 일부 아말감이있다. 그건 모두 작동합니다. 그것은 마치 마법처럼 작동
protected void refreshChart(object sender, EventArgs e)
{
chart.Series.Clear();
foreach (DataSeries s in seriesControl.ListOfSeries)
{
string propertyName = s.YAxisProperty;
//List of data to display for this series
List<Sampled_Data> sampleList = Sample.GetSamplesById(s.ComponentId);
foreach (Sampled_Data dSample in sampleList)
{
//GetPropertyValue returns a float associated with the propertyname
//selected for displaying as the Y Value
s.Series.Points.AddY(BindingLib.GetPropertyValue(dSample, propertyName));
}
chart.Series.Add(s.Series);
}
}
나는 코드의 조각을 실행할 처음 :
가 페이지에 '차트 만들기'를 클릭
이 실행됩니다 코드입니다. 'refreshChart'를 실행하는 버튼을 두 번 클릭하면 's.Series.Points'의 값이 null이므로 NullReferenceException이 발생합니다. 그리고 Point 속성이있는 유형의 새 객체를 만들 수 없습니다. 생성자가 private이거나 protected입니다.이 함수의 후속 호출간에 Points 속성을 조작하지 않으면 왜 null이되는 것입니까?
생각할 수있는 몇 가지 해결책이 있습니다. DataSeries가 시리즈 대신 상속 받도록 설정하면 오류가 계속 발생하면 Point 속성을 새로 추가 할 수 있습니다. 또한 ListOfSeries를 완전히 복사하여 문제가 해결되는지 확인할 수 있습니다. 아마 모든 내 사용자 지정 특성을 Series 개체로 밀어 넣을 수도 있습니다.이 속성에는 customfields 속성 (또는 비슷하게 이름이 지정된)이 있습니다. 다른 객체를 감싸는 객체를 전달하지 않으면이 문제가 해결 될 수 있습니다.
왜 이것이 발생하고 어떻게 해결 될 수 있는지에 대한 아이디어가 있으십니까?