首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSChart -按日期分组的多列

MSChart -按日期分组的多列
EN

Stack Overflow用户
提问于 2013-10-29 02:46:21
回答 1查看 2.2K关注 0票数 0

我需要在几天内显示几条生产线的%利用率。所以我的Y轴是%值。我需要每条生产线在每一天的酒吧。因此,我的X轴将是一组列,每个列标记为生产线,然后分组并标记日期。我将如何在MSchart中做到这一点。

下面是我所需要的样本。它只显示了2条生产线(我需要显示超过2条生产线),并且在X轴标签中不包括生产线名称。

我快到了。下面是我正在创建的图表的图片:

下面是创建它的代码:

代码语言:javascript
复制
Private Sub ChartSetup()
    Try
        dvCapacityUtilization.RowFilter = ""
        dvCapacityUtilization.Sort = "Period ASC, CutUpSet ASC"
        Me.cuChart.BeginInit()
        With Me.cuChart
            .ChartAreas(0).AxisX.Interval = 30
            .ChartAreas(0).AxisX.LabelStyle.Format = "MM/yy"
            .ChartAreas(0).AxisX.LabelStyle.Angle = -90
            .ChartAreas(0).AxisY.MajorGrid.LineColor = Color.Gray
            .ChartAreas(0).AxisX.MajorGrid.LineColor = Color.White
            .ChartAreas(0).AxisX.MinorGrid.LineColor = Color.White
            .DataBindCrossTable(dvCapacityUtilization, _
                "CutUpSet", "Period", "CapacityUtilization", "Label = CapacityUtilization")
        End With
        '
        For Each series In Me.cuChart.Series
            series.IsValueShownAsLabel = False
            series.LabelFormat = "0.0%"
            series.SetCustomProperty("PointWidth", "0.5")
            series.SetCustomProperty("DrawingStyle", "Cylinder")
            series.XValueType = DataVisualization.Charting.ChartValueType.Date
        Next
        Me.cuChart.EndInit()
    Catch ex As Exception
        ErrHandler(Me.Name & " - Chart Setup", ex)
    End Try
End Sub
  1. 如何关闭价值标签?在我的代码中,我使用了IsValueShownAsLabel = False,但它们仍然显示。我最终将允许用户打开或关闭这些值。
  2. 如何将值格式化为XX.X%。在我的代码中,我使用了LabelFormat = 0.0%,但这不起作用。
  3. 如何将X轴标签作为与数据值关联的日期。在我的代码中,我使用AxisX.Interval = 30来获取图表上的标签。

后续:如上面第1段所述,我使用了series.IsValueShownAsLabel = False,但是值标签仍然显示。为了移除它们,我必须做以下工作:

对于series.Points point.Label = String.Empty Next中的每个点

为什么我必须这样做而不是使用IsValueShownAsLabel = False?

EN

回答 1

Stack Overflow用户

发布于 2013-10-29 11:16:12

WINFORM :最后找出一些研发,请按照下面的步骤。

1.在新的winform中从ToolBox拖放新的图表控件.

2.删除默认的"Series1“,因为它是按列值动态生成的。

3.假设我们有以下示例datatable.

代码语言:javascript
复制
 public DataTable GetDataTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("UtilizationDate", typeof(DateTime));
            dt.Columns.Add("ProductionLine", typeof(string));
            dt.Columns.Add("UtilizationValue", typeof(int));

            DataRow dr = dt.NewRow();
            dr[0] = DateTime.Now;
            dr[1] = "Proy01";
            dr[2] = 25;
            dt.Rows.Add(dr);          

            dr = dt.NewRow();
            dr[0] = DateTime.Now;
            dr[1] = "Proy02";
            dr[2] = 15;
            dt.Rows.Add(dr);


            dr = dt.NewRow();
            dr[0] = DateTime.Now;
            dr[1] = "Proy03";
            dr[2] = 125;
            dt.Rows.Add(dr);



            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(1);
            dr[1] = "Proy01";
            dr[2] = 13;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(1);
            dr[1] = "Proy02";
            dr[2] = 111;
            dt.Rows.Add(dr);


            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(1);
            dr[1] = "Proy03";
            dr[2] = 77;
            dt.Rows.Add(dr);


            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(2);
            dr[1] = "Proy01";
            dr[2] = 13;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(2);
            dr[1] = "Proy02";
            dr[2] = 111;
            dt.Rows.Add(dr);


            dr = dt.NewRow();
            dr[0] = DateTime.Now.AddMonths(2);
            dr[1] = "Proy03";
            dr[2] = 77;
            dt.Rows.Add(dr);

            return dt;
        }

4.现在使用DataBindCrossTable.添加以下代码行

代码语言:javascript
复制
chart1.ChartAreas["ChartArea1"].AxisX.IntervalType = DateTimeIntervalType.Months;
            chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
            chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MM-yy";
            DataTable dt = GetDataTable();
            chart1.DataBindCrossTable(dt.DefaultView, "ProductionLine", "UtilizationDate", "UtilizationValue", "Label=UtilizationValue");



            foreach (Series item in chart1.Series)
            {              
                item.IsValueShownAsLabel = true;
                item["PixelPointWidth"] = "50";
                item["DrawingStyle"] = "Cylinder";
                item.XValueType = ChartValueType.DateTime;
            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19648743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档