2014-09-22 137 views
1

已更新代碼,以便您更好地瞭解發生的情況並允許數據加載更快。 我還沒有看到任何網上發佈的回答這個問題。我有一個C#應用程序(Visual Studio 2010 Express,如果這有所不同)的MS圖表控件。數據以較慢的實時速率加載(每秒一次)。我的意圖是一次顯示6分鐘的數據,並且能夠根據需要滾動到另一頁數據。我想要數據填充左側的圖表。隨着數據被添加到圖表中,滾動條和X軸圖例也會移過來,這樣我只能看到最新的數據點。我必須滾動到左側才能看到以前的數據 - 並且在添加新數據點時滾動條跳回。除非我移動它,否則我希望滾動條留在一個位置(左邊緣)。我的表單上有一個1秒的定時器,並且每個時間週期都會添加新的數據。圖表控件添加數據時移動的X軸滾動條

我希望這已經足夠。任何幫助?

代碼以初始化圖表控制:

DateTime startTime = DateTime.Now; 
DateTime endTime = startTime.AddMinutes(6); 
DateTime maxTime = startTime.AddMinutes(24); 
// Bind the chart to the list. 
chartAssociateProductivity.DataSource = Globals.listKohlsPerformanceDataSource; 

chartAssociateProductivity.ChartAreas["ChartArea1"].CursorX.AutoScroll = true; // enable autoscroll 
chartAssociateProductivity.ChartAreas["ChartArea1"].CursorX.IsUserEnabled = false; 
chartAssociateProductivity.ChartAreas["ChartArea1"].CursorX.IsUserSelectionEnabled = false; 

chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.Minimum = startTime.ToOADate(); 
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.Maximum = endTime.ToOADate(); 
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoomable = true; 
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScrollBar.IsPositionedInside = true; 
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoom(startTime.ToOADate(), 6, DateTimeIntervalType.Minutes); 
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScaleView.Position = 0;// startTime.ToOADate(); 
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.MinorTickMark.Enabled = true; 
// disable zoom-reset button (only scrollbar's arrows are available) 
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll; 

// set scrollbar small change to blockSize (e.g. 100) 
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScaleView.SmallScrollSize = 100; 

代碼以添加數據(本例中,我將添加恆定數據):

private void timer1_Tick(object sender, EventArgs e) 
{ 
    listPerformanceDataSource.Add(new PerformanceRecord(0, 248)); 
} 

的數據結構:

public class PerformanceRecord 
{ 
    int bagCount, goal; 
    public PerformanceRecord(int bagCount, int goal) 
    { 
     this.bagCount = bagCount; 
     this.goal = goal; 
    } 
    public int BagCount 
    { 
     get { return bagCount; } 
     set { bagCount = value; } 
    } 
    public int Goal 
    { 
     get { return goal; } 
     set { goal = value; } 
    } 
} 

// Create a list. 
public static List<PerformanceRecord> listPerformanceDataSource = new List<PerformanceRecord>(); 
+1

嗯,這裏有一些缺失的東西來重現這一點。對於我們沒有「RoundUp」(如果它很重要?),也沒有_code添加data_理解(至少對我來說)。 - 我通過改變和扭曲事物來複制的努力沒有成功。一旦我將滾動條設置到左側,它就停留在那裏。明顯地再現問題的另一個問題是時間框架:如果需要花費數小時(甚至僅「幾分鐘)才能看到問題,那麼沒有人可以測試您的代碼。您可以發佈一個修改後的版本,它是自包含的重現? (也許問題會解散,而你嘗試做到這一點;;) – TaW 2014-09-22 23:44:39

+0

感謝您的期待。我會盡力今天更新這篇文章。 – MarkAllan 2014-09-23 13:06:58

+0

發佈更新更詳細的信息,並且運行速度更快。有沒有關於我需要包含的圖表控件的事情?我仍然看到這個問題。 – MarkAllan 2014-09-23 19:25:54

回答

0
ChartArea chartArea=new ChartArea(); 
chartArea = chart1.ChartAreas[series.ChartArea]; 
int scrollBarVal=chartArea.AxisX.ScaleView.Position; 

你必須做一個圖表一個實例並使用它的軸位置