使用 ASP.NET 2.0 进行专业 3D 图表报告 - 第三部分






4.91/5 (15投票s)
本文重点介绍通过图表报告实现内部供应链管理的可见性,并提供评估工具来管理和监控业务流程中产生的活动,从而为及时、准确的业务决策铺平道路。
引言
本文重点介绍内部供应链管理流程的可见性。它是《内部供应链可见性》的续篇。在本文中,目标是使用 MSChart 实现,从而提供评估工具。该解决方案包括柱状图、折线图、面积图、饼图、帕累托图和 Kagi 图。这些图表根据其各自的属性进一步细分。
报告分为隔离报告、累积报告和变化率报告。隔离报告提供特定项目或商品的上下文,在此上下文中,存在另一个子上下文来分析该项目或材料。累积报告提供所有项目的上下文,或者将项目上下文移至侧边。
隔离报告和累积报告进一步分为隔离成本、隔离数量、累积成本和累积数量。
外部工作
在项目中添加 System.Web.UI.DataVisualization.Charting
引用,并打开 Web.config 文件添加以下行
在 system.web/httpHandlers
中,添加此项
<httpHandlers>
<add path="ChartImg.axd" verb="GET,HEAD"
type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler,
System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"
validate="false"/>
</httpHandlers>
我需要在同一页面上生成 200 多个报告,因此我无法将每个报告都放在单独的页面上。这种技术有些奇怪但非常有效。它有效地分离了表示层和业务层。用于控件工作的代码如下所示。此代码仅管理 ISCMS.Main.Chart
对象,并为其提供参数,或者初始化此对象的属性,这些属性定义了图表的类型、周期和样式。生成报告所需的所有属性都设置在这里。
<script runat="server">
ISCMS.Main.Chart chy = new ISCMS.Main.Chart();
bool IsAllowed = false;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SetRadio();
}
}
void SetRadio()
{
if (radProcurement.Checked)
chy._plantSegment = ISCMS.Main.PlantSegregation.PlantSegment.Procurement;
if (radWarehouse.Checked)
chy._plantSegment = ISCMS.Main.PlantSegregation.PlantSegment.Warehouse;
if (radSegregatedCost.Checked)
{
chy._chartBy = ISCMS.Main.PlantSegregation.ChartBy.Segregated_Cost;
chy._is_Segregation = true;
combGoods.Enabled = true;
}
if (radSegregatedQuantity.Checked)
{
chy._chartBy = ISCMS.Main.PlantSegregation.ChartBy.Segregated_Quantity;
chy._is_Segregation = true;
combGoods.Enabled = true;
}
if (radCumulativeCost.Checked)
{
chy._chartBy = ISCMS.Main.PlantSegregation.ChartBy.Cumulative_Cost;
chy._is_Segregation = false;
combGoods.Enabled = false;
}
if (radCumulativeQuantity.Checked)
{
chy._chartBy = ISCMS.Main.PlantSegregation.ChartBy.Cumulative_Quantity;
chy._is_Segregation = false;
combGoods.Enabled = false;
}
if (radChangeRate.Checked)
{
chy._chartBy = ISCMS.Main.PlantSegregation.ChartBy.Rate;
chy._is_Segregation = false;
combGoods.Enabled = true;
}
string chartByFilter = "";
string goodsFilter = "";
chy.InitializeFilter(out chartByFilter, out goodsFilter);
if (!IsPostBack || IsAllowed)
{
combReports.DataSource =
((nodeDataset)Application["nodeDS"]).Nodes.Select(chartByFilter);
combReports.DataTextField = "SelectedNode";
combReports.DataValueField = "Execute";
combReports.DataBind();
System.Data.DataRow[] rows = ((System.Data.DataSet)
Application["Parameters"]).Tables["Goods"].Select(goodsFilter);
ListItem li = new ListItem();
for (int i = 0; i < rows.Length; i++)
{
li = new ListItem();
li.Text = rows[i]["Name"].ToString();
li.Value = rows[i]["Goods_ID"].ToString();
combGoods.Items.Add(li);
}
}
UpdateChart();
}
void UpdateChart()
{
chy._goods_ID = Convert.ToInt32(combGoods.SelectedValue);
chy._goods_Name = combGoods.SelectedItem.Text;
chy._chartName = combReports.SelectedValue.ToString();
chy._charts = ISCMS.Main.PlantSegregation.Charts.Bar;
combMonth.Enabled = false;
if (combPeriod.Text == "Monthly")
combMonth.Enabled = true;
chy.UpdateChartPeriod(combPeriod.Text, combMonth.Text,
combMonth.SelectedValue, combYear.Text);
}
protected void radProcurement_CheckedChanged(object sender, EventArgs e)
{
IsAllowed = true;
SetRadio();
}
protected void combReports_SelectedIndexChanged(object sender, EventArgs e)
{
IsAllowed = false;
SetRadio();
}
</script>
初始化 ISCMS.Main.Chart
对象后,图表就可以渲染了,因为 ISCMS.Main.Chart
本身是一个用于生成图表对象的辅助类,也是其属性的存储库。通过调用 GetChart()
方法,将返回 System.Web.UI.DataVisualization.Charting.Chart
对象,该对象已准备好进行渲染,因为所有图表生成步骤都在 GetChart()
方法中执行。
<table style="width: 980px" >
<tr>
<td >
<%
System.Web.UI.DataVisualization.Charting.Chart Chart1 =
new System.Web.UI.DataVisualization.Charting.Chart();
// Initialize chart
Chart1 = chy.GetChart();
// Render chart control
Chart1.Page = this;
HtmlTextWriter writer = new HtmlTextWriter(Page.Response.Output);
Chart1.RenderControl(writer);
%>
</td>
</tr>
</table>
内部工作
Chart 类
Chart
控件为图表报告提供了一个画布。它充当 chartArea
的容器。因此,它可以被视为图表将被掩盖的框架。SetChart()
方法在解决方案中使用来设置图表的属性。它分配标题并为报告设置图例属性。
System.Web.UI.DataVisualization.Charting.Chart SetChart()
{
System.Web.UI.DataVisualization.Charting.Chart chartTemp =
new System.Web.UI.DataVisualization.Charting.Chart();
chartTemp.BackColor = System.Drawing.Color.Gainsboro;
chartTemp.BackGradientStyle =
System.Web.UI.DataVisualization.Charting.GradientStyle.TopBottom;
chartTemp.BackSecondaryColor = System.Drawing.Color.Silver;
chartTemp.BorderlineColor = System.Drawing.Color.Silver;
// System.Drawing.Color.FromArgb(((int)(((byte)(26)))),
// ((int)(((byte)(59)))), ((int)(((byte)(105)))));
chartTemp.BorderlineDashStyle =
System.Web.UI.DataVisualization.Charting.ChartDashStyle.Solid;
chartTemp.BorderlineWidth = 3;
chartTemp.BorderSkin.SkinStyle =
System.Web.UI.DataVisualization.Charting.BorderSkinStyle.None;
if (_charts == ISCMS.Main.PlantSegregation.Charts.Pie)
{
chartTemp.ChartAreas.Add(SetPieChartArea());
}
else
{
chartTemp.ChartAreas.Add(SetChartArea());
}
chartTemp.Legends.Add(SetLegend());
//chartTemp.Location = new System.Drawing.Point(10, 10);
//chartTemp.Name = "chart";
//chartTemp.Size = new System.Drawing.Size(1000, 450);
chartTemp.TabIndex = 0;
return chartTemp;
}
ChartArea 类
ChartArea
是 Chart 类的内容。它作为集合添加到 Chart 类中。它提供了图表报告的内在可视化,除了数据可视化。数据可视化由 Series
完成,稍后将进行讨论。SetChartArea()
方法设置了图表区域的属性,这些属性定义了要生成的报告的样式、x 轴和 y 轴。
ChartArea SetChartArea()
{
System.Web.UI.DataVisualization.Charting.ChartArea chartArea1 =
new System.Web.UI.DataVisualization.Charting.ChartArea();
chartArea1.Area3DStyle.Inclination = 15;
chartArea1.Area3DStyle.IsClustered = true;
chartArea1.Area3DStyle.IsRightAngleAxes = false;
chartArea1.Area3DStyle.LightStyle =
System.Web.UI.DataVisualization.Charting.LightStyle.Realistic;
chartArea1.Area3DStyle.Perspective = 7;
chartArea1.Area3DStyle.Rotation = 20;
chartArea1.Area3DStyle.WallWidth = 10;
chartArea1.AxisX.LabelStyle.Font = new System.Drawing.Font(
"Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold);
chartArea1.AxisX.LineColor = System.Drawing.Color.Teal;
chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.Teal;
chartArea1.AxisY.LabelStyle.Font = new System.Drawing.Font(
"Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold);
chartArea1.AxisY.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))),
((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.Teal;
chartArea1.BackColor = System.Drawing.Color.Gainsboro;
chartArea1.BackGradientStyle =
System.Web.UI.DataVisualization.Charting.GradientStyle.TopBottom;
chartArea1.BackSecondaryColor = System.Drawing.Color.Silver;
chartArea1.BorderColor = System.Drawing.Color.Teal;
chartArea1.BorderDashStyle =
System.Web.UI.DataVisualization.Charting.ChartDashStyle.Solid;
chartArea1.Name = "Default";
chartArea1.ShadowColor = System.Drawing.Color.Transparent;
return chartArea1;
}
Series 类
Series
类位于 System.Web.UI.DataVisualization.Charting
命名空间中。Series
类对象是 ChartArea
类的内容。它们作为集合添加到 ChartArea
对象中。因此,我们可以在同一个 chartArea
中拥有多种类型的图表,用于比较报告。Series
类对象是 DataPoint
对象的集合。可以通过 series.Points.AddXY(ts.Days, amount)
方法收集 DataPoint
。addXY( , )
方法的第一个参数定义了点的 x 坐标,y 坐标从第二个参数收集。当 series 类型设置为 SeriesChartType.Line
时,DataPoint
将充当连接集合中所有 DataPoint
的点,从而生成一条线。如果设置为 SeriesChartType.Column
,则 y 坐标将是垂直条的高度,其在底座上的位置由 x 坐标决定。Kage 图也是如此。
帕累托图
帕累托图是一种组合图。它是柱状图和折线图的组合。柱状图显示 x 轴上的产品或材料,y 轴上的数量或金额。在同一图表中,折线图显示前一材料的累积总和。InitializeParetoChart()
和 ParetoChartTypeLoad()
是生成此图表的基本方法。
private void InitializeParetoChart()
{
// Initialize chart control
this.chart = SetChart();
// setting attributes associated with pareto chart
this.chart.ChartAreas[0].AxisX.Interval = 1;
this.chart.ChartAreas[0].AxisX.IntervalType =
System.Web.UI.DataVisualization.Charting.DateTimeIntervalType.Days;
this.chart.ChartAreas[0].AxisX.IntervalOffset = 1;
this.chart.ChartAreas[0].AxisX.IntervalOffsetType =
System.Web.UI.DataVisualization.Charting.DateTimeIntervalType.Days;
this.chart.ChartAreas[0].AxisX.LabelAutoFitStyle |=
System.Web.UI.DataVisualization.Charting.LabelAutoFitStyles.LabelsAngleStep90;
this.chart.ChartAreas[0].AxisY2.IsLabelAutoFit = false;
// populating the chart
ParetoChartTypeLoad();
}
void MakeParetoChart(System.Web.UI.DataVisualization.Charting.Chart chart,
string srcSeriesName, string destSeriesName)
{
// get name of the ChartAre of the source series
string strChartArea = chart.Series[srcSeriesName].ChartArea;
// ensure the source series is a column chart type
chart.Series[srcSeriesName].ChartType =
System.Web.UI.DataVisualization.Charting.SeriesChartType.Column;
// sort the data in the series to be by values in descending order
chart.DataManipulator.Sort(
System.Web.UI.DataVisualization.Charting.PointSortOrder.Descending,
srcSeriesName);
// find the total of all points in the source series
double total = 0.0;
foreach (System.Web.UI.DataVisualization.Charting.DataPoint pt
in chart.Series[srcSeriesName].Points)
total += pt.YValues[0];
// set the max value on the primary axis to total
chart.ChartAreas[strChartArea].AxisY.Maximum = total;
// create the destination series and add it to the chart
System.Web.UI.DataVisualization.Charting.Series destSeries =
new System.Web.UI.DataVisualization.Charting.Series(destSeriesName);
chart.Series.Add(destSeries);
// ensure the destination series is a Line or Spline chart type
destSeries.ChartType =
System.Web.UI.DataVisualization.Charting.SeriesChartType.Line;
destSeries.BorderWidth = 3;
// assign the series to the same chart area as the column chart
destSeries.ChartArea = chart.Series[srcSeriesName].ChartArea;
// assign this series to use the secondary axis and set it maximum to be 100%
destSeries.YAxisType =
System.Web.UI.DataVisualization.Charting.AxisType.Secondary;
chart.ChartAreas[strChartArea].AxisY2.Maximum = 100;
// locale specific percentage format with no decimals
chart.ChartAreas[strChartArea].AxisY2.LabelStyle.Format = "P00";
// turn off the end point values of the primary X axis
chart.ChartAreas[strChartArea].AxisX.LabelStyle.IsEndLabelVisible = false;
// for each point in the source series find % of total and assign to series
double percentage = 0.0;
foreach (System.Web.UI.DataVisualization.Charting.DataPoint pt
in chart.Series[srcSeriesName].Points)
{
percentage += (pt.YValues[0] / total * 100.0);
destSeries.Points.Add((Math.Round(percentage, 2)));
}
}
private void ParetoChartTypeLoad()
{
// Accessiing datasource
ISCMS.Main.PlantSegregation pseg =
new ISCMS.Main.PlantSegregation
(_plantSegment, _charts, _chartBy, _is_Segregation, this);
rows = pseg.Process();
// Set report title
this.chart.Titles.Add(SetTitle());
// Initialize Series
System.Web.UI.DataVisualization.Charting.Series series =
new System.Web.UI.DataVisualization.Charting.Series();
series.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))),
((int)(((byte)(26)))), ((int)(((byte)(59)))), ((int)(((byte)(105)))));
series.ChartArea = "Default";
series.Legend = "Default";
series.Name = "Default";
// Add Series to a chart
this.chart.Series.Add(series);
chart.Series["Default"].Points.Clear();
int amount = 0;
// provide series with datapoints
for (int i = 0; i < rows.Length; i++)//
{
amount = pseg.ProcessItem(i);
if (amount == 0)
continue;
chart.Series["Default"].Points.AddXY(
rows[i]["Name"].ToString(), amount);
}
// Make Pareto Chart
if (chart.Series.Count > 1)
chart.Series.RemoveAt(1);
MakeParetoChart(chart, "Default", "Pareto");
// Set chart types for output data
chart.Series["Pareto"].ChartType =
System.Web.UI.DataVisualization.Charting.SeriesChartType.Line;
// Set Color of line Pareto chart
chart.Series["Pareto"].Color = Color.FromArgb(252, 180, 65);
// set the markers for each point of the Pareto Line
chart.Series["Pareto"].IsValueShownAsLabel = false;
chart.Series["Pareto"].MarkerColor = Color.Red;
chart.Series["Pareto"].MarkerStyle =
System.Web.UI.DataVisualization.Charting.MarkerStyle.None;
chart.Series["Pareto"].MarkerBorderColor = Color.MidnightBlue;
chart.Series["Pareto"].MarkerSize = 8;
chart.Series["Pareto"].LabelFormat = "0.#";
// format with one decimal and leading zero
}
折线图
此图表用于表示相对于成本和数量的永久库存。生成此图表的主要方法是 InitializeLineCurvesChart()
和 LineCurvesChartTypeLoad()
。
#region Line Chart
private void InitializeLineCurvesChart()
{
// Initialize chart control
chart = SetChart();
// populating the chart
chart = LineCurvesChartTypeLoad(chart);
}
private System.Web.UI.DataVisualization.Charting.Chart LineCurvesChartTypeLoad(
System.Web.UI.DataVisualization.Charting.Chart chart)
{
// Accessiing datasource
ISCMS.Main.PlantSegregation pseg =
new ISCMS.Main.PlantSegregation
(_plantSegment, _charts, _chartBy, _is_Segregation, this);
rows = pseg.Process();
// Set title for Report
chart.Titles.Add(SetTitle());
// Initialize Series
System.Web.UI.DataVisualization.Charting.Series series =
new System.Web.UI.DataVisualization.Charting.Series();
series.BorderColor = System.Drawing.Color.Transparent;
series.BorderWidth = 3;
series.ChartArea = "Default";
series.ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Area;
series.Color = _serial_Color;
series.Legend = "Default";
series.MarkerSize = 4;
series.MarkerStyle = System.Web.UI.DataVisualization.Charting.MarkerStyle.Circle;
series.Name = "series";
series.ShadowColor = System.Drawing.Color.Gainsboro;
series.ShadowOffset = 2;
series.XValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.Date;
series.YValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.Double;
series.BorderColor = System.Drawing.Color.Transparent;
TimeSpan ts = DateTime.Now - new DateTime(1900, 1, 1);
double days = ts.Days;
double days2 = days;
int amount = 0;
int perviousAmount = 0;
// providing series datapoints
for (int pointIndex = 0; pointIndex < rows.Length; pointIndex++)
{
amount = pseg.ProcessItem(pointIndex);
ts = DateTime.Parse(rows[pointIndex]["Date"].ToString()) - new DateTime(1900, 1, 1);
if (perviousAmount == 0 && pointIndex == 0)
{
series.Points.AddXY(ts.Days, amount);
perviousAmount = amount;
continue;
}
if (pointIndex == (rows.Length - 1))
{
series.Points.AddXY(ts.Days, amount);
continue;
}
if (perviousAmount != amount)
{
series.Points.AddXY(ts.Days, amount);
perviousAmount = amount;
continue;
}
}
series.ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Line;
series.IsValueShownAsLabel = true;
chart.ChartAreas["Default"].Area3DStyle.Enable3D = true;
// Add Series to a chart
chart.Series.Add(series);
return chart;
}
#endregion
饼图
这是一个累积图,可以通过调用 InitializePieCollection()
方法生成。其代码如下所示
private void InitializePieCollection()
{
// Initialize chart control
this.chart = SetChart();
// setting attributes associated with Pie chart
this.chart.Legends[0].Enabled = true;
this.chart.Legends[0].IsEquallySpacedItems = true;
// populating the chart
PieChartTypeLoad();
}
private void PieChartTypeLoad()
{
// Accessiing datasource
ISCMS.Main.PlantSegregation pseg =
new ISCMS.Main.PlantSegregation
(_plantSegment, _charts, _chartBy, _is_Segregation, this);
rows = pseg.Process();
// Set report title
this.chart.Titles.Add(SetTitle());
// Initialize Series
System.Web.UI.DataVisualization.Charting.Series series =
new System.Web.UI.DataVisualization.Charting.Series();
series.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))),
((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
series.ChartArea = "Area1";
series.ChartType =
System.Web.UI.DataVisualization.Charting.SeriesChartType.Pie;
series.Color = System.Drawing.Color.FromArgb(((int)(((byte)(180)))),
((int)(((byte)(65)))), ((int)(((byte)(140)))), ((int)(((byte)(240)))));
series.CustomProperties = "DoughnutRadius=15, PieDrawingStyle=Concave,
CollectedLabel=Other, MinimumRelative" +
"PieSize=10";
series.Font = new System.Drawing.Font("Trebuchet MS", 8.25F,
System.Drawing.FontStyle.Bold);
series.Label = "#PERCENT{P1}";
series.Legend = "Default";
series.MarkerStyle =
System.Web.UI.DataVisualization.Charting.MarkerStyle.Circle;
series.Name = "Default";
series.XValueType =
System.Web.UI.DataVisualization.Charting.ChartValueType.Double;
series.YValueType =
System.Web.UI.DataVisualization.Charting.ChartValueType.Double;
System.Web.UI.DataVisualization.Charting.DataPoint dataPoint1 =
new System.Web.UI.DataVisualization.Charting.DataPoint(0, 0);
int amount = 0;
// providing series with datapoints
for (int i = 0; i < rows.Length; i++)
{
amount = pseg.ProcessItem(i);
dataPoint1 = new System.Web.UI.DataVisualization.Charting.DataPoint(0,
amount);
dataPoint1.CustomProperties = "OriginalPointIndex=" + i.ToString();
dataPoint1.IsValueShownAsLabel = false;
dataPoint1.LegendText = rows[i]["Name"].ToString();
//if (!chkPercentage.Checked)
dataPoint1.Label = rows[i]["Name"].ToString();
series.Points.Add(dataPoint1);
}
// Add Series to a chart
this.chart.Series.Add(series);
// Set series font
chart.Series[0].Font = new Font("Trebuchet MS", 8, FontStyle.Bold);
chart.Series[0]["CollectedToolTip"] = "Other";
chart.Series["Default"]["PieLabelStyle"] = "Outside";
chart.Series["Default"]["CollectedThreshold"] = "8";
// Remove supplemental series and chart area if they already exsist
if (chart.Series.Count > 1)
{
chart.Series.RemoveAt(1);
chart.ChartAreas.RemoveAt(1);
// Reset automatic position for the default chart area
chart.ChartAreas["Default"].Position.Auto = true;
}
}
条形图
这里显示了柱状图的代码
private void InitializeBarColumn()
{
// Initialize chart control
this.chart = SetChart();
// populating the chart
BarColumnChartTypeLoad();
}
private void BarColumnChartTypeLoad()
{
// Accessiing datasource
ISCMS.Main.PlantSegregation pseg =
new ISCMS.Main.PlantSegregation
(_plantSegment, _charts, _chartBy, _is_Segregation, this);
rows = pseg.Process();
// Set report's title
this.chart.Titles.Add(SetTitle());
// Initialize Series
System.Web.UI.DataVisualization.Charting.Series series =
new System.Web.UI.DataVisualization.Charting.Series();
series.ChartArea = "Default";
series.Legend = "Default";
series.Name = "series";
series.XValueType =
System.Web.UI.DataVisualization.Charting.ChartValueType.DateTime;
series.ChartType =
System.Web.UI.DataVisualization.Charting.SeriesChartType.Column;
this.chart.Series.Clear();
// Set title for Report
this.chart.Series.Add(series);
TimeSpan ts = DateTime.Now - new DateTime(1900, 1, 1);
double days = ts.Days;
double days2 = days;
int amount = 0;
// providing series with datapoints
for (int pointIndex = 0; pointIndex < rows.Length; pointIndex++)
{
amount = pseg.ProcessItem(pointIndex);
ts = DateTime.Parse(rows[pointIndex]["Date"].ToString()) -
new DateTime(1900, 1, 1);
series.Points.AddXY(ts.Days, amount);
}
series.Color = _serial_Color;
series.BorderColor = System.Drawing.Color.Transparent;
chart.ChartAreas["Default"].Area3DStyle.Enable3D = true;
// Setting attribute associated with chart area
chart.ChartAreas[0].AxisX.LabelStyle.IntervalOffset = 1;
chart.ChartAreas[0].AxisX.LabelStyle.IntervalOffsetType =
System.Web.UI.DataVisualization.Charting.DateTimeIntervalType.Days;
chart.ChartAreas[0].AxisX.LabelStyle.Interval = 2;
chart.ChartAreas[0].AxisX.LabelStyle.IntervalType =
System.Web.UI.DataVisualization.Charting.DateTimeIntervalType.Days;
}
Kagi 图
Kagi 图用于监测一段时间内材料或成品率。可以通过以下代码建立此图表
private void InitializeKagiChart()
{
// Initialize chart control
this.chart = SetChart();
// populating the chart
KagiChartTypeLoad();
}
private void KagiChartTypeLoad()
{
ISCMS.Main.PlantSegregation pseg =
new ISCMS.Main.PlantSegregation
(_plantSegment, _charts, _chartBy, _is_Segregation, this);
rows = pseg.Process();
DataSet ds = new DataSet();
ds.Merge(rows);
System.Web.UI.DataVisualization.Charting.Series series =
new System.Web.UI.DataVisualization.Charting.Series();
series.BorderColor = System.Drawing.Color.Teal;
series.BorderWidth = 3;
series.ChartArea = "Default";
series.ChartType =
System.Web.UI.DataVisualization.Charting.SeriesChartType.Kagi;
series.Color = System.Drawing.Color.Tomato;
series.CustomProperties = "PriceUpColor=SkyBlue";
series.IsXValueIndexed = true;
series.Legend = "Default";
series.Name = "Default";
series.ShadowColor = System.Drawing.Color.Gainsboro;
series.ShadowOffset = 2;
series.XValueType =
System.Web.UI.DataVisualization.Charting.ChartValueType.Date;
series.YValueType =
System.Web.UI.DataVisualization.Charting.ChartValueType.Double;
this.chart.Titles.Add(SetTitle());
series.Points.Clear();
double bufRate = 0;
TimeSpan ts;
for (int pointIndex = 0; pointIndex < rows.Length; pointIndex++)
{
ts = DateTime.Parse(rows[pointIndex]["Date"].ToString()) -
new DateTime(1900, 1, 1);
if (ds.Tables[0].Select(" Date = #" +
DateTime.Parse(
rows[pointIndex]["Date"].ToString()).ToShortDateString() +
"#").Length > 0)// ts.Days == 0 )
{
series.Points.AddXY(ts.Days, Convert.ToDouble(rows[pointIndex]["Unit_Cost"]));
bufRate = Convert.ToDouble(rows[pointIndex]["Unit_Cost"]);
}
else
series.Points.AddXY(ts.Days, bufRate);
}
chart.ChartAreas["Default"].Area3DStyle.Enable3D = true;
//series["ReversalAmount"] = combReversalAmount.Text;
this.chart.Series.Add(series);
}