Изменение цвета колонок в столбчатой диаграмме C#

Рейтинг: 1Ответов: 1Опубликовано: 29.04.2023

Задача присоединить данные из MC Access(день и температура) в элемент управления Chart в виде столбчатой диаграммы. Сама проблема возникает в изменении цвета колонок: у положительной температуры - красная, у отрицательной - синяя. Можно ли обратится к точкам диаграммы и изменить цвет столбца без создания таблицы через прописывание каждого столбика вручную? Ниже представлен код, выводится все кроме изменения цвета столбцов.

private void button1_Click(object sender, EventArgs e)
        {
            String connectionString = @"Provider=Microsoft.ACE.OLEDB.16.0;Data Source=C:\Users\user\Desktop\bd.accdb";
            OleDbConnection conn = new OleDbConnection(connectionString);
            
            DataTable dt = new DataTable();
            conn.Open();

            OleDbDataAdapter command = new OleDbDataAdapter($"SELECT Дата, Температура FROM погода WHERE Дата >= #03/01/2023# AND Дата <= #03/09/2023#", conn);
            command.Fill(dt);
            chart1.DataSource= dt;
            conn.Close();

            chart1.Series["Температура"].XValueMember = "Дата";
            chart1.Series["Температура"].YValueMembers = "Температура";
            chart1.Titles.Add("Температура за период");

            foreach (DataPoint dataPoint in chart1.Series[0].Points)
            {
                double value = dataPoint.YValues[0];

                if (value > 0)
                {
                    dataPoint.Color = Color.Red;
                }
                else if (value < 0)
                {
                    dataPoint.Color = Color.Blue;
                }
            }
        }

Ответы

▲ 0

В режиме отладки видно, что chart1.Series[0].Points не содержит ни один элемент DataPoint и просто нечего перекрасить. Попробуйте вместо:

chart1.DataSource= dt;
chart1.Series["Температура"].XValueMember = "Дата";
chart1.Series["Температура"].YValueMembers = "Температура";

Использовать такой вариант:

chart1.Series[0].Points.DataBind(dt.AsDataView(), "Дата", "Температура", "");

В таком случае chart1.Series[0].Points уже содержит точки и их можно перекрасить.