-3

我只在上午 8:00 和上午 17:00 的图表上需要两条线。

我的 MSchart 输出是。

在此处输入图像描述

我建议的输出是

在此处输入图像描述

我的 aspx.cs 页面代码

IQueryable<Agile.HelpDesk.Core.Entities.Incident> incidents = new IncidentManager().GetIncidentsByDate(startDate, endDate);

        Chart1.Series["Series1"].Points.Clear();
        Chart1.Series["Series2"].Points.Clear();
        TimeSpan tsStart = new TimeSpan(08, 00, 00);
        TimeSpan tsEnd = new TimeSpan(17, 00, 00);

        foreach (Agile.HelpDesk.Core.Entities.Incident item in incidents)
        {
            if (item.OpenDate.TimeOfDay >= tsStart && item.OpenDate.TimeOfDay <= tsEnd)
            {
                Chart1.Series["Series1"].YValueType = ChartValueType.Time;

                //Chart1.Series["Series1"].Points.AddXY(item.OpenDate, Convert.ToDouble(string.Format("{0:HH}.{0:mm}", item.OpenDate)));
                Chart1.Series["Series1"].Points.AddXY(item.OpenDate, item.OpenDate);

                string dayName = item.OpenDate.ToString("dddd");

                Chart1.Series["Series1"].Points[Chart1.Series["Series1"].Points.Count - 1].ToolTip = "Id : " + item.ID.ToString() + ", Open Date : " + item.OpenDate;
                Chart1.Series["Series1"].Color = Color.Red;
            }
            else
            {
                Chart1.Series["Series2"].YValueType = ChartValueType.Time;

                //Chart1.Series["Series2"].Points.AddXY(item.OpenDate, Convert.ToDouble(string.Format("{0:HH}.{0:mm}", item.OpenDate)));
                Chart1.Series["Series2"].Points.AddXY(item.OpenDate, item.OpenDate);
                Chart1.Series["Series2"].Points[Chart1.Series["Series2"].Points.Count - 1].ToolTip = "Id : " + item.ID.ToString() + ", Open Date : " + item.OpenDate;
            }
        }

        //Chart1.Series["Series1"].YValueType = ChartValueType.Time;
        //Chart1.Series["Series2"].YValueType = ChartValueType.Time;

        Chart1.ChartAreas["ChartArea1"].AxisY.IntervalType = DateTimeIntervalType.Hours;
        Chart1.ChartAreas["ChartArea1"].AxisY.Interval = 1;

        Chart1.ChartAreas["ChartArea1"].AxisY.LabelStyle.Format = "HH:mm tt";

        Chart1.ChartAreas["ChartArea1"].AxisY.Title = "Time";
        Chart1.ChartAreas["ChartArea1"].AxisX.Title = "Date";

        //set Chart Marker Color
        Chart1.Series["Series1"].MarkerColor = Color.LightBlue;
        Chart1.Series["Series2"].MarkerColor = Color.Red;

        // Set point chart type
        Chart1.Series["Series1"].ChartType = SeriesChartType.Point;
        Chart1.Series["Series2"].ChartType = SeriesChartType.Point;

        // Enable data points labels
        Chart1.Series["Series1"].IsValueShownAsLabel = false;
        Chart1.Series["Series2"].IsValueShownAsLabel = false;

        //Chart1.Series["Series1"]["LabelStyle"] = "Center";

        // Set marker size
        Chart1.Series["Series1"].MarkerSize = 5;
        Chart1.Series["Series2"].MarkerSize = 5;

        // Set marker shape
        Chart1.Series["Series1"].MarkerStyle = MarkerStyle.Circle;
        Chart1.Series["Series2"].MarkerStyle = MarkerStyle.Circle;

        // Enable 3D
        //Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
        UltraWebTab1.SelectedTab = 0;
        UltraWebTab1.Visible = true;

.aspx 页面代码

<asp:Chart ID="Chart1" runat="server" Width="812px" Height="696px" ImageLocation="~/temp/ChartPic_#SEQ(300,3)"
                                ImageType="Png" BackColor="WhiteSmoke" Palette="None" BorderColor="26, 59, 105"
                                BorderDashStyle="" BackSecondaryColor="White" BackGradientStyle="TopBottom" Visible="true"
                                BorderWidth="2" ImageStorageMode="UseImageLocation">
                                <Legends>
                                    <asp:Legend Enabled="False" IsTextAutoFit="False" Name="Default" BackColor="Transparent"
                                        Font="Trebuchet MS, 8.25pt, style=Bold">
                                    </asp:Legend>
                                </Legends>
                                <BorderSkin SkinStyle="None"></BorderSkin>
                                <Series>
                                    <asp:Series MarkerSize="10" Name="Series1" ChartType="Point" BorderColor="180, 26, 59, 105"
                                        ShadowOffset="1" Font="Trebuchet MS, 9pt">
                                    </asp:Series>
                                    <asp:Series MarkerSize="10" Name="Series2" ChartType="Point" BorderColor="180, 26, 59, 105"
                                        ShadowOffset="1" Font="Trebuchet MS, 9pt">
                                    </asp:Series>
                                </Series>
                                <ChartAreas>
                                    <asp:ChartArea Name="ChartArea1" BorderColor="64, 64, 64, 64" BorderDashStyle="Solid"
                                        BackSecondaryColor="White" BackColor="Gainsboro" ShadowColor="Transparent" BackGradientStyle="TopBottom">
                                        <Area3DStyle Rotation="10" Perspective="10" Inclination="15" IsRightAngleAxes="false"
                                            WallWidth="0" IsClustered="False" />
                                        <AxisY LineColor="64, 64, 64, 64" Minimum="0" Maximum="1">
                                            <LabelStyle Font="Trebuchet MS, 8.25pt" />
                                            <MajorGrid LineColor="64, 64, 64, 64" />
                                        </AxisY>
                                        <AxisX LineColor="64, 64, 64, 64">
                                            <LabelStyle Font="Trebuchet MS, 8.25pt" />
                                            <MajorGrid LineColor="64, 64, 64, 64" />
                                        </AxisX>
                                    </asp:ChartArea>
                                </ChartAreas>
                            </asp:Chart>
4

2 回答 2

1

第二条带状线(trippino 的回答)将根据需要在 16:00 而不是 17:00 添加。一种解决方法是使用自定义标签并突出显示 8:00 到 17:00 之间的区域。

Chart1.ChartAreas[0].AxisY.CustomLabels.Add(8, 17,"some label if needed");

trippino 指出的另一个选项是在图表中添加两个新系列。一个为 8:00,另一个为 17:00。系列中点的 X 坐标应该是图表中从最小日期到最大日期的所有日期,Y 坐标应该是 8:00,然后是 17:00 用于另一条线。

于 2013-07-26T08:00:41.747 回答
1

您必须在图表中添加 2 个新常量系列(第一个是常量 = 8:00,另一个常量 = 17:00)或添加一个 StripLine,如下所示:

        var sl = new System.Windows.Forms.DataVisualization.Charting.StripLine();
        sl.IntervalOffset = 8;
        chart1.ChartAreas[0].AxisY.StripLines.Add(sl);
于 2013-07-23T09:21:53.440 回答