mschart 的时间进度移动 bar


<asp:Chart ID="Chart5" Visible="true" BackImageAlignment="Left" RightToLeft="Inherit" runat="server" Palette="None" PaletteCustomColors="192, 192, 255; Silver" Height="100" Width="600"> <Series> <asp:Series BorderColor="Black" BorderWidth="1" BorderDashStyle="Solid" Name="Series1" ChartType="StackedBar100" BackHatchStyle="Percent20"> </asp:Series> <asp:Series Name="Series2" BorderColor="Black" BorderWidth="1" BorderDashStyle="Solid" ChartType="StackedBar100" BackHatchStyle="Percent20"> </asp:Series> </Series> <Titles>//下面的几个title就是定位的,比如竖线,2012年05月21
<asp:Title Name="Start" Alignment="TopLeft" Text="" TextStyle="Default"> <Position Auto="false" X="0" Width="90" Height="14" Y="60" />//注意x=“0” 这个是百分比 后面的同样 y 也是百分比,设置其中的宽高可以显示跟多的字 </asp:Title>//这个定位的是开始的时间(2012年05月08日) <asp:Title Name="StartLine" Text="|"> <Position X="0" Y="55" />//这个定位的是开始的竖线(|) </asp:Title> <asp:Title Name="Progress" Text="" Alignment="MiddleLeft"> <Position X="40" Y="6" />//这个定位现在时间(2012年05月24日)下面的不多写了 </asp:Title> <asp:Title Visible="true" Name="ProgressLine" Text="|"> <Position Y="18" /> </asp:Title> <asp:Title Name="End" Text="" Alignment="TopLeft"> <Position Width="90" Height="14" X="85" Y="60" /> </asp:Title> <asp:Title Name="EndLine" Text="|"> <Position X="85" Y="55" /> </asp:Title> </Titles> <Legends> <asp:Legend BackColor="Transparent" Docking="Bottom" Alignment="Center" Font="Trebuchet MS, 8.25pt, style=Bold" IsTextAutoFit="False" Name="Default" LegendStyle="Table"> </asp:Legend> </Legends> <ChartAreas> <asp:ChartArea BackImageAlignment="Left" Name="ChartArea1" BorderColor="red" BackSecondaryColor="Transparent" BackColor="Transparent" ShadowColor="Transparent"> <Position Width="85" Height="70" />//这个很重要 width是百分比 没有设置这个的话 画图区域不会再最左边 到时定位难以定位 其中85 在cs中用到 <AxisY LineColor="64, 64, 64, 64"> <LabelStyle Font="Trebuchet MS, 8.25pt, style=Bold" IsEndLabelVisible="true" /> <MajorGrid LineColor="64, 64, 64, 64" Enabled="false" /> </AxisY> <AxisX LineColor="64, 64, 64, 64"> <LabelStyle Font="Trebuchet MS, 8.25pt, style=Bold" IsEndLabelVisible="true" TruncatedLabels="true" /> <MajorGrid LineColor="64, 64, 64, 64" Enabled="false" /> </AxisX> </asp:ChartArea> </ChartAreas> </asp:Chart>

上面的是aspx代码  下面的是cs

int TatolDays = GetDays(model.RegDate.ToString(), model.LastDate.ToString());
            //开始时间到现在
            int StartToProgress = GetDays(model.RegDate.ToString(), DateTime.Now.ToString());
            int ProgressToEnd = GetDays(DateTime.Now.ToShortDateString(), model.LastDate.ToString());
            string Unfinished = "已动工:" + ((double)StartToProgress / TatolDays).ToString("p") + "(" + StartToProgress + "天)";
            string Finished = "";
            if (ProgressToEnd == 0)
            {
                Finished = "工程时间已结束!";
            }
            else
            {
                Finished = "剩  下:" + ((double)ProgressToEnd / TatolDays).ToString("P") + "(" + ProgressToEnd + "天)";
            }
            //设置开始时间
            Chart5.Titles["Start"].Text = model.RegDate.ToString("yyyy年MM月dd日  ");
            //设置结束时间
            Chart5.Titles["End"].Text = model.LastDate.ToString("yyyy年MM月dd日  ");

            //设置标题移动  定位今天的时间   
            //算法
            /*
             * 得到总工程的时间除以总工程所占的比例(前面设置的85%)  得到100%(整个画布空白的)的所有需要的工程时间
             * 再用已完成的除以全部的就ok了
             * **/

            Chart5.Titles["Progress"].Position.X = (float)(StartToProgress / (TatolDays / 0.85)) * 100;//这个0.85是在前面设置的了
            Chart5.Titles["Progress"].Text = DateTime.Now.ToString("yyyy年MM月dd日");
            // 定位今天时间的竖线
            Chart5.Titles["ProgressLine"].Position.X = (float)(StartToProgress / (TatolDays / 0.85)) * 100;
            Chart5.Series["Series1"].Name = Unfinished;
            Chart5.Series["Series2"].Name = Finished;
            Chart5.ChartAreas["ChartArea1"].AxisX.Enabled = AxisEnabled.False;
            Chart5.ChartAreas["ChartArea1"].AxisY.Enabled = AxisEnabled.False;
            //bar的这句
            Chart5.Series[Unfinished].Points.AddY(StartToProgress);//只绑定两个就行了
            Chart5.Series[Finished].Points.AddY(ProgressToEnd);
原文地址:https://www.cnblogs.com/fengkuangkg/p/2511640.html