none
請教關於 Chart DataBind 的建議方式 RRS feed

  • 問題

  • 程式的流程是:
    每一分鐘會產生一個新的數列
    產生數列後,一分鐘之內該數列的數值有可能會一直被更換
    一旦產生更換,就會透過 Event_UpdateBar() 要求更新


    chart1.Series["Price"].XValueMember = "Time";
    chart1.Series["Price"].YValueMembers = "Price";

    chart1.Series["Volumn"].XValueMember = "Time";
    chart1.Series["Volumn"].YValueMembers = "Volumn";


    Event_AddBar()
    {
      // 此時 chart1.Series[] 已經新增一筆數列
      UI_Chart_Addbar();
    }

    Event_UpdateBar()
    {
      // 此時 chart1.Series[] 最後一筆數列的數據發生變化
      UI_Chart_Updatebar();
    }

    UI_Chart_Addbar()
    {
      ....
      ....
      chart1.ChartAreas[0].AxisY.Minimum = NewMin;
      chart1.ChartAreas[0].AxisY.Maximum = NewMax;

      chart1.DataBind();
    }

    UI_Chart_Updatebar()
    {
      ....
      ....
      chart1.ChartAreas[0].AxisY.Minimum = NewMin;
      chart1.ChartAreas[0].AxisY.Maximum = NewMax;

      chart1.DataBind();
    }

    目前有兩個問題想請教一下:
    1.因為呼叫 UI_Chart_Updatebar 的次數相當的頻繁,執行 DataBind() 的時候,是否有較為正確或是有效率的方式達成同樣效果
       意思就是 : 是否可透過有效率的方式只要求 chart 重繪 [指定數列] 的數據

    2.如果是自行設定指定數據會比DataBind()有效率嗎?
      例如:
    UI_Chart_Updatebar()
    {
      // chart1.DataBind();

      // 自行設定指定數列的內容

      DataPoint pPoint1 = chart1.Series["Price"].Points[LastIndex];
      DataPoint pPoint2 = chart1.Series["Volume"].Points[LastIndex];

      pPoint1.YValues[0] = (double)m_SourceList[LastIndex].Close;
      pPoint2.YValues[0] = (double)m_SourceList[LastIndex].Volume;
    }

    3.如果 chart1.ChartAreas[0].AxisY.Minimum 的值如果與 NewMin 相同的時候, 此時是否會產生重繪的動作?(如果會,為了效率就需要加入判斷機制避免重繪)

      
    • 已編輯 David0629 2016年11月7日 上午 09:18
    2016年11月7日 上午 07:13

解答