繁体   English   中英

更改同系列C#的颜色列

[英]change the color column of the same series C#

我有一个 chart1 对象,并向其中添加了一个带有 n 列的系列。 我希望根据某些标准将列涂成红色或绿色。

我有以下 if 代码,但例如,即使我已经通过了 if,它们都被漆成绿色。

我已经使用了断点,如果它通过 if 和 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用来索引RowsPoints的方式不是很优雅。

然后在您的 DataBind 之后,您可以添加:

chart1.Customize += CustomizeBarColours;

for循环中的这两行,你只需要做一次:

chart1.Series["Series1"].XValueMember = "MES";
chart1.Series["Series1"].YValueMembers = "PID";

然后你可以完全删除你的 for 循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM