我有一个chart1对象,并向其中添加了一个列,其中包含n列。我希望根据某些条件将列涂成红色或绿色。
我有以下用于if的代码,但是即使我经历过if,所有这些代码都被涂成绿色。
我已经使用过断点,并且如果它通过了if and else,但它没有按我的意愿绘制列。
//maximum line
StripLine linea = new StripLine();
linea.StripWidth = 0;
linea.BorderColor = System.Drawing.Color.Red;
linea.BorderWidth = 2;
linea.BorderDashStyle = ChartDashStyle.Solid;
linea.IntervalOffset = 75;
linea.BackColor = System.Drawing.Color.Orange;
chart1.ChartAreas[0].AxisY.StripLines.Add(linea);
//minimum line
StripLine lineaM = new StripLine();
lineaM.StripWidth = 0;
lineaM.BorderColor = System.Drawing.Color.Green;
lineaM.BorderWidth = 2;
lineaM.BorderDashStyle = ChartDashStyle.Solid;
lineaM.IntervalOffset = 45;
lineaM.BackColor = System.Drawing.Color.Orange;
chart1.ChartAreas[0].AxisY.StripLines.Add(lineaM);
chart1.Series.Clear();
chart1.Series.Add("Series1");
chart1.Series["Series1"].BorderWidth = 3;
chart1.Titles.Clear();
chart1.Titles.Add("Total changes");
chart1.ChartAreas[0].AxisY.Maximum = 100;
for (int i = 0; i < dt.Rows.Count;i++)
{
string qty = dt.Rows[i]["PID"].ToString();
if (Convert.ToInt32(qty) > 45)//if it is greater than the minimum, the column must be red
{
chart1.Series["Series1"].XValueMember = "MES";
chart1.Series["Series1"].YValueMembers = "PID";
chart1.Series["Series1"].Color = Color.Red;
}
else //otherwise it must be green
{
chart1.Series["Series1"].XValueMember = "MES";
chart1.Series["Series1"].YValueMembers = "PID";
chart1.Series["Series1"].Color = Color.Green;
}
}
chart1.Series["Series1"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
//chart1.ChartAreas["ChartData"]
chart1.DataSource = dt;
chart1.DataBind();
有人可以帮我吗?
我不知道您正在使用的图表组件,但是显然,可以在绑定数据点之后通过调用事件处理程序来自定义点。看来您必须执行以下操作:
private void CustomizeBarColours(object sender, System.EventArgs e)
{
for (int i = 0; i < dt.Rows.Count;i++)
{
string qty = dt.Rows[i]["PID"].ToString();
if (Convert.ToInt32(qty) > 45)//if it is greater than the minimum, the column must be red
{
chart1.Series["Series1"].Points[i].Color = Color.Red;
}
else //otherwise it must be green
{
chart1.Series["Series1"].Points[i].Color = Color.Green;
}
}
}
当心索引超出范围,用i
索引到Rows
和Points
的方式不是很优雅。
然后在您的DataBind之后可以添加:
chart1.Customize += CustomizeBarColours;
来自for循环的这两行,您只需要执行一次:
chart1.Series["Series1"].XValueMember = "MES";
chart1.Series["Series1"].YValueMembers = "PID";
然后您可以完全删除for循环。