C#——chart控件綁定數據


幾個重要的屬性

在介紹實現方法前需要先了解chart控件的幾個屬性

  1. ChartAreas :繪圖區域,當數據量大時只要一個繪圖區域。
  2. AxisX:X軸。(Y軸一致,此文進介紹X軸)。
  3. AxisX.ScrollBar:X軸滾動條。
  4. AxisX.ScaleView.Position:X軸顯示的起始值。
  5. AxisX.ScaleView.Size:X軸顯示數據的數量

    圖中
    AxisX.ScaleView.Position = 941
    AxisX.ScaleView.Size = 1941-941+1

實現思路

  1. 將數據分段每段10000到50000之間(以50000為例)。
  2. 給chart控件添加滾動條,
  3. 將第一個數據段的數據綁定到chart數據源上,給chart添加鼠標滾動事件。
  4. 滾動滾輪可以更改AxisX.ScaleView.Position的值,當顯示完最后一個數值時,更改chart的數據源將第二段數據綁定在chart數據源上。
  5. 依次循環就可以實現所有數據的顯示

代碼實現

  1. 數據分段
double[] data = {...};//需要顯示的數據 長度為200萬。 public List<double[]> DataPanel = new List<double[]>(); for(int m =0;m<40;m++) { double [] smallArray = new double [50000]; for(int n = 0;n<50000;n++) { smallArray [n] = data [i*50000+n]; } DataPanel .add(smallArray); }

 

  1. 給chart控件添加滾動條
private void ChartScrollbarStyle() { chartAmend.ChartAreas[0].AxisX.ScrollBar.Enabled = true; chartAmend.ChartAreas[0].AxisX.ScaleView.Position = 1; chartAmend.ChartAreas[0].AxisX.ScaleView.Size = 300; chartAmend.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll; chartAmend.ChartAreas[0].AxisX.ScrollBar.ButtonColor = Color.Silver; chartAmend.ChartAreas[0].AxisX.ScrollBar.LineColor = Color.Black; chartAmend.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false; }

 

  1. 將數據綁定在chart數據源上,更改DataCount,就更改了數據源。
int DataCount = 0; chart1.Series[0].Points.DataBindY(DataPanel[DataCount]);

 

  1. 給chart控件添加鼠標滾輪事件
chart1.MouseWheel += Chart1_MouseWheel; private void Chart1_MouseWheel(object sender, MouseEventArgs e) { int position = Convert.ToInt32(chart1.ChartAreas[0].AxisX.ScaleView.Position); int WindowSize = chart1.ChartAreas[0].AxisX.ScaleView.Size; if (e.Delta < 0) { position += 200;//滾輪動一下,移動多少數據 if (position >= chartAmend.ChartAreas[0].AxisX.Maximum - WindowSize)//一段數據顯示完畢 { DataCount++; if (DataCount >= DataPanel.Count) { MessageBox.Show("所有數據已經全部顯示完畢","提示"); DataCount = DataPanel.Count-1; return; } chart1.Series[0].Points.DataBindY(Overall.DataPanel[DataCount]); position = 1;//新的一段數據開始時 滾動條移動到最左側 } } else { position -= 200; if (position < 1) { if (DataCount == 0) { position = 1; MessageBox.Show("已經是第一個數據", "提示"); } else { DataCount--; } chart1.Series[0].Points.DataBindY(Overall.DataPanel[DataCount]); position = Convert.ToInt32(chart1.ChartAreas[0].AxisX.Maximum - WindowSize); } } chart1.ChartAreas[0].AxisX.ScaleView.Position = position; } 

 

  1. 到此處,基本上就已經完成了。該方法本人經過驗證是可行的,但是因為本文的代碼是經過刪減整理的,可能會有一些問題。取用時要自行驗證。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM