从 DataGridView 获取数据到 Chart
Get data from DataGridView to Chart
我需要将数据从单个 DataGridView 获取到 3 个不同的图表中,每列到一个图表中。
这是我第一次使用图表,所以我对它们进行了一些研究,但找不到任何可以帮助我解决这个特定问题的东西。
下面是我的 DataGridView 和我的图表的屏幕截图,以及它们各自的图例:
我需要的是(至少在理论上)一个非常简单的东西。在 "SANITY" 图表中,我需要将位于 Table[0, 0]
的值转换为类似 sanityChart.Series[0]
的值作为它的 'Y' 值,依此类推。 "UNIT" 和 "ISSUES DB" 也一样。
任何帮助将不胜感激。
从你提问的方式和你展示的图片来看,我相信你想要这样的东西:
我只用了一个 Chart
并且我为每个 Columns
添加了一个 Series
。
设置图表后,我为 table 中的每一行添加了一个数据点到每个 series/columns..:[=21=]
// setting up the datagridview
Table.Rows.Clear();
Table.Columns.Clear();
Table.Columns.Add("state", "");
Table.Columns.Add("sanity", "SANITY");
Table.Columns.Add("unit", "UNIT");
Table.Columns.Add("issuesDb", "ISSUES DB");
// filling in some data
Table.Rows.Add("ALL PASSED", 86, 21, 2);
Table.Rows.Add("FAILED", 7, 0, 1);
Table.Rows.Add("Cancelled", 0, 0, 0);
// Now we can set up the Chart:
List<Color> colors = new List<Color>{Color.Green, Color.Red, Color.Black};
chart1.Series.Clear();
for (int i = 0 ; i < Table.Rows.Count; i++)
{
Series S = chart1.Series.Add(Table[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 < Table.Rows.Count; i++)
{
for (int j = 1 ; j < Table.Columns.Count; j++)
{
int p = chart1.Series[i].Points.AddXY(Table.Columns[j].HeaderText, Table[j, i].Value);
}
}
请注意,我选择添加 DataPoints
和 AddXY
重载,并且还决定通过添加 X-Values
作为 strings
。在内部它们仍然转换为 doubles
并且都将具有 0
的值!这对我们来说不是问题,但重要的是要了解我们没有使用有效数字,因此不能将它们视为数字!优点是轴标签被设置为列 headers 而无需任何进一步的工作..
我需要将数据从单个 DataGridView 获取到 3 个不同的图表中,每列到一个图表中。 这是我第一次使用图表,所以我对它们进行了一些研究,但找不到任何可以帮助我解决这个特定问题的东西。
下面是我的 DataGridView 和我的图表的屏幕截图,以及它们各自的图例:
我需要的是(至少在理论上)一个非常简单的东西。在 "SANITY" 图表中,我需要将位于 Table[0, 0]
的值转换为类似 sanityChart.Series[0]
的值作为它的 'Y' 值,依此类推。 "UNIT" 和 "ISSUES DB" 也一样。
任何帮助将不胜感激。
从你提问的方式和你展示的图片来看,我相信你想要这样的东西:
我只用了一个 Chart
并且我为每个 Columns
添加了一个 Series
。
设置图表后,我为 table 中的每一行添加了一个数据点到每个 series/columns..:[=21=]
// setting up the datagridview
Table.Rows.Clear();
Table.Columns.Clear();
Table.Columns.Add("state", "");
Table.Columns.Add("sanity", "SANITY");
Table.Columns.Add("unit", "UNIT");
Table.Columns.Add("issuesDb", "ISSUES DB");
// filling in some data
Table.Rows.Add("ALL PASSED", 86, 21, 2);
Table.Rows.Add("FAILED", 7, 0, 1);
Table.Rows.Add("Cancelled", 0, 0, 0);
// Now we can set up the Chart:
List<Color> colors = new List<Color>{Color.Green, Color.Red, Color.Black};
chart1.Series.Clear();
for (int i = 0 ; i < Table.Rows.Count; i++)
{
Series S = chart1.Series.Add(Table[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 < Table.Rows.Count; i++)
{
for (int j = 1 ; j < Table.Columns.Count; j++)
{
int p = chart1.Series[i].Points.AddXY(Table.Columns[j].HeaderText, Table[j, i].Value);
}
}
请注意,我选择添加 DataPoints
和 AddXY
重载,并且还决定通过添加 X-Values
作为 strings
。在内部它们仍然转换为 doubles
并且都将具有 0
的值!这对我们来说不是问题,但重要的是要了解我们没有使用有效数字,因此不能将它们视为数字!优点是轴标签被设置为列 headers 而无需任何进一步的工作..