繁体   English   中英

添加数据时图表控件的X轴滚动条移动

[英]Chart control X-axis scrollbar moving when data is added

更新了代码,使您可以更好地了解正在发生的事情,并允许更快地加载数据。 我仍然没有看到任何在线发布的内容可以回答这个问题。

我在C#应用程序上有一个MS Chart控件(如果有区别,可以使用Visual Studio 2010 Express)。 数据以较低的实时速率(每秒一次)加载。 我的意图是一次显示6分钟的数据,并在必要时可以滚动到另一页数据。 我希望数据从左侧填充图表。 将数据添加到图表时,滚动条和X轴图例也会移动,因此我只能看到最新的数据点。 我必须向左滚动才能看到以前的数据-添加新数据点时,滚动条会跳回。 我希望滚动条保持在一个位置(左边缘),除非我移动它。 我的表单上有1秒的计时器,每个时间周期都会添加新数据。

我希望这足够了。 有什么帮助吗?

初始化图表控件的代码:

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>();
ChartArea chartArea=new ChartArea();
chartArea = chart1.ChartAreas[series.ChartArea]; 
int scrollBarVal=chartArea.AxisX.ScaleView.Position;

您必须制作一个chartArea实例并使用其轴位置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM