2017-02-22 1 views
0

차트 시리즈 그룹을 만들고 시리즈에 데이터를 추가 한 다음 시리즈를 표시하여 시리즈 중 일부를 표시하려고합니다. 데이터가 변경되고 사용자가 볼 시리즈를 선택할 수 있습니다. 나는이 방법이 모든 시리즈를 chart.Series.Clear();으로 삭제하고 같은 방법으로 시리즈를 다시 만드는 것보다 낫다고 생각한다.차트 시리즈 만들기, 데이터 추가 및 가시성 설정

예를 들어 무작위 마일리지가있는 카풀에있는 차량 목록을 표시 한 다음 표시 할 차량을 선택하십시오.

아래 코드는 작동하지 않습니다 (어디에서 코멘트 했나요?). 이 시리즈는 공개되지 않으므로과 같은 공개 컬렉션에 추가해야한다고 생각하지만 잘 모르겠습니다.

도움 주셔서 감사합니다.

// create new chart series and add to a chartarea 
     ChartArea TestChartArea = new ChartArea(); 
     public void CreateChartSeries() 
     { 
      List<string> lstCars = new List<string> { "Mazda", "Tesla", "Honda", "Jaguar", "Ford", "Toyota" }; 

      foreach (string Car in lstCars) 
      { 
       // car series created correctly? 
       var Srs = new Series(Car); 
       Srs.ChartArea = TestChart.Name; 
       Srs.YAxisType = AxisType.Primary; 
       Srs.Color = Color.Red; 
       Srs.ChartType = SeriesChartType.Line; 
       TestChart.Series.Add(Srs); 
      } 
     } 

     // add data to chart series 
     public void SeriesData() 
     { 
      List<string> lstCars = new List<string> { "Mazda", "Tesla", "Honda", "Jaguar", "Ford", "Toyota" }; 
      int[] Xseries = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
      int[] Milage = new int[10]; 

      Random Random = new Random(); 

      foreach (string Car in lstCars) 
      { 
       for (int M = 0; M < 10; M++) 
        Milage[M] = Random.Next(150, 15000); 

       // not sure how to call and add data to each series 
       Srs.Points.DataBindXY(Xseries, Milage); 
      } 
     } 

     // plot series - some visible 
     public void PlotCreatedSeries() 
     { 
      // not sure how to refer to each series 
      Mazda.Enabled = true; 
      Tesla.Enabled = false; 
      Honda.Enabled = true; 
      Jaguar.Enabled = false; 
      Ford.Enabled = true; 
      Toyota.Enabled = false; 
     } 

답변

1

당신이 Series는 루프 내에서 사용할 수있는 범위 즉에 만드는 데 사용 'Srs' 이름입니다. 루프의 끝에서 당신이 할 새로 당신의 ChartSeries을 만들어 추가

TestChart.Series.Add(Srs); 

Series재산 공공 SeriesCollection이다. 당신이 중 하나에 액세스 할 수 있습니다에 이것은 지금부터 .. Legend(s) 또는 ChartArea(s), 말에 반대로 단수 형태 이름과 복수의 재산 이름으로,이 경우 동일,

조금 혼란 그 인덱스 ..

Series s = TestChart.Series[0] // the series you have added first 

.. 또는, 가독성 및 Name 속성에 의해,보다 안정된 :

Series s = TestChart.Series["Mazda"] // the same series 

TestChart.Series["Mazda"].Enabled = true; 

참고 'name' 또한 까다로운 단어입니다.

변수를 선언하면 '이름'이 부여됩니다. Series s = new Series();

그러나 많은 개체는 Name라는특성이 있습니다 s.Name = "Volvo";

전자는 고유해야하지만 후자는 단지 문자열입니다; 그것도 고유하게 유지하십시오, 그러나 시스템은 당신을 지키지 않을 것입니다.

전자는 결코 바꿀 수 없지만 본 것처럼 범위를 벗어날 수 있습니다. 후자는 단지 문자열이고 변경할 수 있습니다. 아직도 어딘가에 참조로 변수 자체가 SeriesiesCollection Series의 요소로 여기, 한 SCOP의 외출하지 않습니다

주 .. 당신이 DataPoints또는가 바로 바인딩 추가 할 여부

너까지.

전자의 경우 many binding 옵션이 있습니다.

후자의 경우 사용할 수있는 Chart.Points methods .. :

  • Add(DataPoint)
  • AddY(YValue)
  • AddXY(XValues, YValue(s))

참고 때로는, 특히 실시간 차트가 삽입에 의미가 있습니다 a DataPointInsertXXX 방법!

MSDN에서 찾아보십시오! 중간 버전은 x 값이 숫자가 아니거나 실제 이름과 같은 의미가없는 경우에만 의미가 있습니다. - 의미있는 x 값을 숫자 (또는 DateTimes)으로 추가하는 것이 중요합니다. 툴팁, 확대/축소 또는 표시 범위와 같은 추가 목표를위한 것입니다.

그렇게하는 것은 초보자가 가장 흔히 저지르는 실수 일 것입니다. Chart은 확인으로 보이지만 내부의 데이터가 손상되어 읽지 않습니다.

+0

감사합니다. TaW - 도움을 받아 일할 수있는 코드가 있습니다. – Zeus

관련 문제