Как изменить цвет серии диаграммы

У меня есть одна серия, которая заполняет мою диаграмму записями из базы данных. Отображается семь записей, но в цвете sanme.

Я безуспешно пытаюсь изменить цвет каждой полосы

гистограмма winforms

Ниже приведены строки, которые я пробовал, но получил одну большую зеленую полосу (:

        private void button1_Click(object sender, EventArgs e)
    {
        /*First empty the chart2 to fire the current data*/
        if (cbChart.SelectedItem == null)
        {
            chart.Visible = false;
            chart.Controls.Clear();
        }
        else
            //pnchart.Controls.Clear();
        chart.Visible = true;
        chart.Titles.Clear();


        /*Add a new title*/
        Title bezeichung = new Title("Finance" + Environment.NewLine + "(GWU)", Docking.Top, new Font("Yu Gothic", 8, FontStyle.Bold), Color.Black);
        chart.Titles.Add(bezeichung);          
        chart.Titles.Add(bezeichung2);



         if (cbChart.SelectedItem != null)
        {
      string S =    ConfigurationManager.ConnectionStrings[""].ConnectionString;
      SqlConnection con = new SqlConnection(S);
      SqlCommand cmd = new SqlCommand();
      cmd.Connection = con;
      cmd.CommandType = CommandType.StoredProcedure;
      cmd.CommandText = ("[dbo].[storedprocedure]");
      cmd.Parameters.AddWithValue("@Table_Name", cbChart.SelectedValue.ToString());
      SqlDataReader myReader;  // DataReader to just read Data from the Datbase

            try
            {
                //DO SOMETHING
                con.Open();
                myReader = cmd.ExecuteReader();

                while (myReader.Read())
                {

                   //Parameters (Seriesname, x-axis data & y-axis data)
                    this.chart.Series["Series"].Points.AddXY(myReader["Finance"], myReader["GWU"]);

                    // remove grid lines
                    chart.ChartAreas[0].AxisX.MajorGrid.LineWidth = 0;
                    chart.ChartAreas[0].AxisY.MajorGrid.LineWidth = 0;
                    chart.ChartAreas[0].AxisX.LabelStyle.Angle = -45;

      chart.Series["series1"].Points[0].Color = Color.Green;
      chart.Series["series1"].Points[1].Color = Color.Red;
      chart.Series["series1"].Points[2].Color = Color.PowderBlue;
      chart.Series["series1"].Points[3].Color = Color.Peru;
      chart.Series["series1"].Points[4].Color = Color.Pink;
      chart.Series["series1"].Points[5].Color = Color.Purple;
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
        }

         else
         {

MessageBox.Show("Bitte ", "Info", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }

    }

Это сообщение об ошибке, которое я получил после его запуска: индекс находится за пределами допустимого диапазона, индекс не должен быть отрицательным и должен быть меньше размера списка.

И график после нажатия кнопки:

введите здесь описание изображения


person mikybrain    schedule 27.03.2015    source источник
comment
Какой тип у вашего объекта диаграммы?   -  person Zack    schedule 27.03.2015
comment
Объект кнопки. если щелкнуть кнопку, она соединяется с базой данных и заполняет диаграмму.   -  person mikybrain    schedule 27.03.2015
comment
Ваш код должен работать нормально. Вы запускаете его каждый раз после добавления точек данных? ChartType = Column?   -  person TaW    schedule 27.03.2015
comment
Кнопка не имеет свойства Series, поэтому, очевидно, это не кнопка. Если вы перейдете к определению chart, экземпляром какого класса он является, я спрашиваю...   -  person Zack    schedule 27.03.2015
comment
@Зак: Как ты думаешь, что это? Совершенно очевидно, что это элемент управления Chart.   -  person TaW    schedule 28.03.2015
comment
Привет, я отредактировал свой код. Я перекинул диаграмму с панели «Инструменты» в форму. Взял кнопку и применил мой код выше. Я надеюсь, что это может помочь решить мою проблему, если это возможно   -  person mikybrain    schedule 28.03.2015


Ответы (1)


Вы пытаетесь изменить цвет точек перед их добавлением в серию. Переместите приведенный ниже блок из цикла while и проверьте, существует ли достаточное количество точек в серии, прежде чем пытаться получить доступ по индексу,

  chart.Series["series1"].Points[0].Color = Color.Green;
  chart.Series["series1"].Points[1].Color = Color.Red;
  chart.Series["series1"].Points[2].Color = Color.PowderBlue;
  chart.Series["series1"].Points[3].Color = Color.Peru;
  chart.Series["series1"].Points[4].Color = Color.Pink;
  chart.Series["series1"].Points[5].Color = Color.Purple;

Ниже приведены изменения, которые необходимо внести в код.

while (myReader.Read())
{
//Parameters (Seriesname, x-axis data & y-axis data)
this.chart.Series["Series"].Points.AddXY(myReader["Finance"], myReader["GWU"]);

}

if(chart.ChartAreas.Count > 0)
{
chart.ChartAreas[0].AxisX.MajorGrid.LineWidth = 0;
chart.ChartAreas[0].AxisY.MajorGrid.LineWidth = 0;
chart.ChartAreas[0].AxisX.LabelStyle.Angle = -45;
}


if(chart.Series["series1"].Points.Count > 5)
{
chart.Series["series1"].Points[0].Color = Color.Green;
chart.Series["series1"].Points[1].Color = Color.Red;
chart.Series["series1"].Points[2].Color = Color.PowderBlue;
chart.Series["series1"].Points[3].Color = Color.Peru;
chart.Series["series1"].Points[4].Color = Color.Pink;
chart.Series["series1"].Points[5].Color = Color.Purple;
}
person ASN    schedule 30.03.2015
comment
@ Ананд Спасибо, чувак. Я забыл вставить в диаграмму области Thnxxxxxx - person mikybrain; 01.04.2015