2017-10-19 68 views
1

我有一個圖表控件有兩個按鈕。第一個調用燭臺圖表。第二個調用條形圖。如果我只調用其中一個,一切都很好。但是如果我點擊條形圖按鈕從燭臺圖獲取X軸值。條形圖X軸應該從0-15。MS圖表顯示錯誤的X軸值

如何他們看: https://imgur.com/a/IICYh

在formload陰陽燭圖加載first.Everything仍然有效。 單擊條形圖的關閉/打開按鈕時,它將留下燭臺圖表中的X軸值。

點擊關閉/打開後點擊燭臺圖表的圖表按鈕。 Y軸值現在不存在。

方法調用圖表:

public void CandleStickChartMain() 
    { 
     // clear the chart 
     if (ChartCandle.Series.Count > 0) this.ChartCandle.Series[0].Points.Clear(); 
     this.ChartCandle.Series.Clear(); 
     this.ChartCandle.Titles.Clear(); 


     //Clear Grid 
     ChartCandle.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineWidth = 0; 
     ChartCandle.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineWidth = 0; 

     //Series 
     ChartCandle.Series.Add("Date"); 
     ChartCandle.Series["Date"].YValuesPerPoint = 4; 
     ChartCandle.Series["Date"].XValueMember = "Day"; 
     ChartCandle.Series["Date"].YValueMembers = "High,Low,Open,Close"; 
     ChartCandle.Series["Date"].XValueType = ChartValueType.DateTime; 
     ChartCandle.Series["Date"].CustomProperties = "PriceDownColor=Red,PriceUpColor=Green"; 
     ChartCandle.Series["Date"]["OpenCloseStyle"] = "Triangle"; 
     ChartCandle.Series["Date"]["ShowOpenClose"] = "Both"; 
     ChartCandle.DataManipulator.IsStartFromFirst = true; 
     ChartCandle.Series["Date"].ChartType = SeriesChartType.Candlestick; 

     //Axis Y Minimum 
     ChartCandle.ChartAreas["ChartArea1"].AxisY.Minimum = Open.Min() - (Open.Min()/50); 

     //Data Binding 
     ChartCandle.DataSource = ChartDataTable; 
     ChartCandle.DataBind(); 

    } 


public void BarChart() 
    { 

     // clear the chart 
     if (ChartCandle.Series.Count > 0) this.ChartCandle.Series[0].Points.Clear(); 
     this.ChartCandle.Series.Clear(); 
     this.ChartCandle.Titles.Clear(); 

     // Set palette 
     this.ChartCandle.Palette = ChartColorPalette.Excel; 

     // Set title 
     this.ChartCandle.Titles.Add("Price Data Open/Close"); 

     //Add series 
     //Series Open 
     var seriesOpen = ChartCandle.Series.Add("Open"); 
     for (int i = 0; i < Open.Length; i++) 
     { 

      seriesOpen.Points.Add(Open[i]); 
     } 
     //Series Close 
     var SeriesClose = ChartCandle.Series.Add("Close"); 
     for (int i = 0; i < Close.Length; i++) 
     { 
      SeriesClose.Points.Add(Close[i]); 
     } 

     var chartAreaOpenClose = ChartCandle.ChartAreas[seriesOpen.ChartArea]; 

     // Zoom and scroll options 
     // set view range to [0,max] 
     chartAreaOpenClose.AxisX.Minimum = 0; 
     chartAreaOpenClose.AxisX.Maximum = Open.Length + 1; 

     // enable autoscroll 
     chartAreaOpenClose.CursorX.AutoScroll = true; 

     // let's zoom to [0,blockSize] (e.g. [0,100]) 
     chartAreaOpenClose.AxisX.ScaleView.Zoomable = true; 
     chartAreaOpenClose.AxisX.ScaleView.SizeType = DateTimeIntervalType.Number; 
     int position = 0; 
     int size = 15; 
     chartAreaOpenClose.AxisX.ScaleView.Zoom(position, size); 

     // disable zoom-reset button (only scrollbar's arrows are available) 
     chartAreaOpenClose.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll; 

     // set scrollbar small change to blockSize (e.g. 100) 
     chartAreaOpenClose.AxisX.ScaleView.SmallScrollSize = 15; 

     // additional 
     ChartCandle.ChartAreas[0].AxisY.IsStartedFromZero = false; 

    } 
+0

對我來說,向ChartArea添加燭臺或庫存類型圖表會打破「Axis.IsStartedFromZero = false」行爲。 – NekojiruSou

回答

-1

我沒有看到你解除綁定您的數據。也許你應該設置ChartCandle.DataSource = null

更新:

你的問題很容易通過使用兩個不同的ChartAreas解決:

chart1.ChartAreas.Clear(); 
chart1.ChartAreas.Add("CandleChart"); 

chart1.Series.Clear(); 
chart1.Titles.Clear(); 

我將此添加到每個方法的開頭和方法中的每個ChartArea參考只是引用了正確的名稱:

chart1.ChartAreas["CandleChart"].AxisX.MajorGrid.LineWidth = 0; 
chart1.ChartAreas["CandleChart"].AxisY.MajorGrid.LineWidth = 0; //etc. 

當我做到這一切後,一切正常預期。按鈕在圖形之間正確切換。

+0

增加了'ChartCandle.DataSource = null;''ChartCandle.DataBind();'到 'BarChart()',但它仍然是一樣的。 –

+0

@ B-Z我無法完全測試你的代碼,因爲我沒有這些數據。你能包括數據嗎? –

+0

數據來自poloniex的api。 [示例數據](https://poloniex.com/public?command=returnChartData¤cyPair=BTC_XMR&start=1507633439&end=9999999999&period=14400) –