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>();
嗯,這裏有一些缺失的東西來重現這一點。對於我們沒有「RoundUp」(如果它很重要?),也沒有_code添加data_理解(至少對我來說)。 - 我通過改變和扭曲事物來複制的努力沒有成功。一旦我將滾動條設置到左側,它就停留在那裏。明顯地再現問題的另一個問題是時間框架:如果需要花費數小時(甚至僅「幾分鐘)才能看到問題,那麼沒有人可以測試您的代碼。您可以發佈一個修改後的版本,它是自包含的重現? (也許問題會解散,而你嘗試做到這一點;;) – TaW 2014-09-22 23:44:39
感謝您的期待。我會盡力今天更新這篇文章。 – MarkAllan 2014-09-23 13:06:58
發佈更新更詳細的信息,並且運行速度更快。有沒有關於我需要包含的圖表控件的事情?我仍然看到這個問題。 – MarkAllan 2014-09-23 19:25:54