Tengo un script que en algún momento crea un gráfico a partir de un DataGrid, este DataGrid contiene 3 columnas: ahora el problema es que cuando se genera el gráfico, la primera fila siempre se duplica y la coloca entre todas las otras barras del gráfico .

Ejemplo: supongamos que el gráfico debe ser A-B-C, en lugar de A-A-B -A-C, de manera similar.

Consulte la captura de pantalla aquí: gráfico resultante

El código fuente que utilicé es este:

 for (int i = 0; i < dataGridView1.Rows.Count; i++) 
 {
  this.chart1.Series["Spent hr"].Points.AddXY(dataGridView1.Rows[i].Cells[0].Value.ToString(), Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value.ToString()));
  this.chart1.Series["Budgeted hr"].Points.AddXY(dataGridView1.Rows[i].Cells[0].Value.ToString(), Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value.ToString()));
 }
0
Matteo Sala 22 feb. 2020 a las 09:29

2 respuestas

La mejor respuesta

Ok, no tengo idea de por qué esto funciona, pero al agregar este código justo después de que la inicialización del ciclo for resolvió el problema, no solo se duplicó la primera fila, sino todas las filas después de que se puso:

                        if (i == dataGridView1.Rows.Count - dataGridView1.Rows.Count)
                        {
                            foreach (var series in chart1.Series)
                            {
                                series.Points.Clear();
                            }

                        }
0
Matteo Sala 22 feb. 2020 a las 09:42

Probar esto -

    //filling the Coloumns
    dataGridView1.Rows.Clear();
    dataGridView1.Columns.Clear();

    dataGridView1.Columns.Add("name", "Column1");
    dataGridView1.Columns.Add("budgetedhr", "Column2");
    dataGridView1.Columns.Add("spenthr", "Column3");

    // filling in Rows with some data
    dataGridView1.Rows.Add("Jhon", 21, 23);
    dataGridView1.Rows.Add("Nicol", 31, 2);
    dataGridView1.Rows.Add("Matteo", 23, 41);

    // Now we can set up the Chart:
    List<Color> colors = new List<Color> { Color.Green, Color.Red};

    chart1.Series.Clear();

    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        Series S = chart1.Series.Add(dataGridView1[0, i].Value.ToString());
        S.ChartType = SeriesChartType.Column;
        S.Color = colors[i];
    }

    // and fill in all the values from the dgv to the chart:
    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        for (int j = 1; j < dataGridView1.Columns.Count; j++)
        {
            int p = chart1.Series[i].Points.AddXY(dataGridView1.Columns[j].HeaderText, dataGridView1[j, i].Value);
        }
    }
0
Dileepa Rajapaksa 22 feb. 2020 a las 09:48