2017-11-20 10 views
0
private void MapPie() 
{ 
    List<string> allValues = new List<string>(); 
    var NameLables = new List<string>(); 

    CON.ConnectionString = ConfigurationManager.ConnectionStrings["conDB"].ConnectionString; 
    CON.Open(); 
    CMD = new SqlCommand("select top (5) * from tblRecordDefects order by qty desc", CON); 
    RDR = CMD.ExecuteReader(); 
    while (RDR.Read()) 
    { 
     allValues.Add(Convert.ToString(RDR["qty"])); 
     var day = RDR.GetString(RDR.GetOrdinal("dname")); 
     NameLables.Add(day); 
    } 

    Func<ChartPoint, string> labelPoint = chartPoint => 
    string.Format("{0} ({1:P})", chartPoint.Y, chartPoint.Participation); 

    DataContext = this; 
} 

여기에서 RDR["qty"]RDR.GetString(RDR.GetOrdinal("dname"))을 얻을 수있는 방법은 string.Format("{0} ({1:P})", chartPoint.Y, chartPoint.Participation);입니다. 나는 toArray()와 같은 다른 방법을 시도했지만 모두 작동하지 않았다.라이브 차트 파이에 값을 추가하는 방법은 무엇입니까?

답변

0

두 가지 튜플이 아닌 두 개의 별도 목록에 데이터를 보관하는 이유는 무엇입니까?하지만 여기에 두 가지 버전의 코드가 있습니다. 하나는 코드의 두 가지 버전이며 다른 하나는 두 가지 목록으로 유지됩니다.

private void MakeData() 
    { 
     List<string> allValues = new List<string>(); 
     var NameLables = new List<string>(); 

     //Simulate the SQL query by looping over X times 
     for (int i = 0; i < 5; i++) 
     { 
      allValues.Add((i + 1).ToString()); 
      NameLables.Add(DateTime.Today.AddDays(i).ToString("dd-MM-yyyy")); 
     } 
     seriesCol = new SeriesCollection(); 

     seriesCol.AddRange(Enumerable.Range(0, allValues.Count).Select(x => new PieSeries { Title = NameLables[x], Values = new ChartValues<ObservableValue> { new ObservableValue(double.Parse(allValues[x])) } })); 
    } 

그리고이 두 예제에서 두 번째 버전

private void MakeData2() 
    { 
     var temp = new SeriesCollection(); 

     for (int i = 0; i < 5; i++) 
     { 
      var dname = DateTime.Today.AddDays(i).ToString("dd-MM-yyyy"); 
      var qty = i; 
      temp.Add(new PieSeries { Title = dname, Values = new ChartValues<ObservableValue> { new ObservableValue(qty) } }); 
     } 

     seriesCol = temp; 

    } 

뷰 모델은 그

<lvc:PieChart Grid.Row="1" Series="{Binding Path=seriesCol}"/> 
에 다음
private SeriesCollection _seriesCol; 
    public virtual SeriesCollection seriesCol 
    { 
     get { return _seriesCol; } 
     set 
     { 
      Set(() => seriesCol, ref _seriesCol, value); 
     } 
    } 

당신은 볼 seriesCol

라는 특성 바인딩이 있습니다
+0

좋은 설명. MVVMLight를 사용하고 있음을 언급하는 것을 잊었습니다. 그 세트 람다는 나에게 새로운 것이었다. –

+0

MVVMLight를 모든 용도로 사용하는 습관의 미안한 힘, 좋은 프레임 워크입니다! –

+0

감사합니다. [이]와 같은 lables (https://drive.google.com/open?id=1q8-A8uJrqDPi00zJDATbs50YsBozzlnC)를 표시하는 방법을 알 수 있습니까? – Xhint