c# - 创建Horiz。在屏幕外绘制数据时,图表上的滚动条

时间:2015-11-30 11:22:44

标签: c# scroll charts scrollbar horizontal-scrolling

我有一个折线图,在绘制了足够的数据点后,数据将超过屏幕上可见的数据(因此图表仅显示最新数据)。发生这种情况时,我希望为X轴填充一个滚动条,允许用户使用滚动条查看以前的数据。

我该怎么做呢?我不希望用户能够拖动或缩放图表本身,只是为了单独使用滚动条在图表中导航。

我看过这篇文章:https://msdn.microsoft.com/en-us/library/dd456730.aspx但它没有帮助&滚动条不会出现。

1 个答案:

答案 0 :(得分:0)

如果没有看到代码的相关部分,很难确定问题。

这是一个奇怪的陈述:

  

在绘制了足够的数据点后,数据将超过   屏幕上可见的内容(以便图表仅显示最新数据)。

现在只有在设置NaN之后才会发生这种情况,因为默认情况下,当您添加点时,图表控件会越来越多地挤压该区域。

但是当你设置了可以显示的最大值时,没有滚动条可以工作甚至显示。听起来合乎逻辑,对吧?

因此要么不在第一时间设置它,要么在点数超过您想要显示的数量时将其清除。要清除它,请使用chart1.ChartAreas[0].AxisX.Maximum = Double.NaN;

chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = true;

或者,当然,将它设置为您想要显示的最后一点!

在查看了您不能做的事情后,让我们看看您需要做些什么才能显示滚动条:

首先启用它:

chart1.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;

接下来,告诉它只显示滚动手柄而不是缩放重置按钮:

chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = false;

有关滚动条可以显示/执行的各种操作,请参阅MSDN on ScrollBarButtonStyles

并确保用户无法进行缩放设置:

ScaleView.MinSizeType

最后将当前范围设置为显示:

chart1.ChartAreas [0] .AxisX.ScaleView.Size = 111; // show 111 DataPoints

现在滚动条应显示。

研究AxisScaleView class是个好主意,因为它有几个有用的属性..

根据您的X值的数据类型,您可能还需要将chart1.ChartAreas[0].AxisX.ScaleView.MinSizeType = DateTimeIntervalType.Number; 设置为适合您数据的任何内容:

string tblnm = "Vehicle";
            SqlConnection conn;
            using (conn = new SqlConnection(connection))
            {
                conn.Open();           
                System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
                cmd.CommandText = @"IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES 
                       WHERE TABLE_NAME='" + tblnm + "') SELECT 1 ELSE SELECT 0"; ;
                cmd.Connection = conn;
                cmd.ExecuteNonQuery();
                int x = Convert.ToInt32(cmd.ExecuteScalar());
                conn.Close();
                if (x == 2)
                {
                    MessageBox.Show("Lentelės yra");
                }
                else
                {
                    MessageBox.Show("Lenteliu nėra.Sukuriama");
                }