RangeChart 轴重复数据
RangeChart Axis repeating data
根据图片,我希望相同的条目在同一行而不是分开。我想我需要为每个条目创建不同的系列,但作为新手,我不知道该怎么做。到目前为止,我已经创建了一个系列,如图所示。如果您能帮助我编写一些代码,将不胜感激。这是我的代码:
private void LoadChartData()
{
var s = new Series();
s.ChartType = SeriesChartType.RangeBar;
chart1.Series.Clear();
chart1.Series.Add(s);
s.SetCustomProperty("PixelPointWidth", "25");
chart1.Series[0].YValueType = ChartValueType.DateTime;
chart1.ChartAreas[0].AxisY.LabelStyle.Format = "yyyy-MM-dd";
chart1.ChartAreas[0].AxisY.Interval = 1;
chart1.ChartAreas[0].AxisY.IntervalType = DateTimeIntervalType.Days;
chart1.ChartAreas[0].AxisY.IntervalOffset = 1;
chart1.Series[0].XValueType = ChartValueType.String;
chart1.ChartAreas[0].AxisY.Minimum = minDate.ToOADate();
chart1.ChartAreas[0].AxisY.Maximum = maxDate.ToOADate();
ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings["shopmanagerConnectionString1"];
MySqlConnection con = new MySqlConnection(conSettings.ToString());
MySqlCommand cmd = new MySqlCommand(@"select * from shopmanager.planning;", con);
MySqlDataReader myReader;
try
{
con.Open();
myReader = cmd.ExecuteReader();
while (myReader.Read())
{
//check if machine is "en attente"
string notPlanned;
notPlanned = myReader.GetString("machine_name");
if(notPlanned == "En attente")
{
return;
}
else
{
s.LabelForeColor = Color.Black;
s.Font = new System.Drawing.Font("Arial", 10f);
var start_date = myReader.GetDateTime("predicted_start_date");
var predicted_finish_date = myReader.GetDateTime("predicted_delivery");
var machine = myReader.GetString("machine_name");
int pix = s.Points.AddXY(machine, start_date, predicted_finish_date);
s.Points[pix].Label = myReader.GetString("project_number") + " " + myReader.GetString("part_name");
}
}
cmd.Parameters.Clear();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
con.Close();
}
您的问题来自将 x 值添加为字符串。这是一个常见的错误,尤其是因为一开始看起来一切都很好。此外,由于有时只是 没有数值 ;你的机器有名字,城市不是数字,ID 可能是也可能不是数字。人们的名字从来都不是等等。所以有很多原因可以解释为什么要添加非数字 x 值。
但它们只是添加到自动标签中,实际的 x 值都是 0
,因此无法正确分组或用于其他用途。这可能是也可能不是问题。您需要分组,所以这是一个问题!
所以,如果您没有可以使用的号码,您必须补一些。
这是一个示例,它将所有(新)名称填充到 Dictionary
作为 Keys
并将它们的索引添加为数字 Value
:
// maybe best at class level
Dictionary<string, int> machines = new Dictionary<string, int>();
// your reading loop here..
..
string machine = ..// your retrieval code here
if (!machines.ContainsKey(machine) ) machines.Add(machine, machines.Count);
// now add the point:
int px = yourSeries.Points.AddXY(machines[machine], yourYvalue1, yourYvalue2);
yourSeries.Points[px].AxisLabel = machine;
..
// loopend
根据图片,我希望相同的条目在同一行而不是分开。我想我需要为每个条目创建不同的系列,但作为新手,我不知道该怎么做。到目前为止,我已经创建了一个系列,如图所示。如果您能帮助我编写一些代码,将不胜感激。这是我的代码:
private void LoadChartData()
{
var s = new Series();
s.ChartType = SeriesChartType.RangeBar;
chart1.Series.Clear();
chart1.Series.Add(s);
s.SetCustomProperty("PixelPointWidth", "25");
chart1.Series[0].YValueType = ChartValueType.DateTime;
chart1.ChartAreas[0].AxisY.LabelStyle.Format = "yyyy-MM-dd";
chart1.ChartAreas[0].AxisY.Interval = 1;
chart1.ChartAreas[0].AxisY.IntervalType = DateTimeIntervalType.Days;
chart1.ChartAreas[0].AxisY.IntervalOffset = 1;
chart1.Series[0].XValueType = ChartValueType.String;
chart1.ChartAreas[0].AxisY.Minimum = minDate.ToOADate();
chart1.ChartAreas[0].AxisY.Maximum = maxDate.ToOADate();
ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings["shopmanagerConnectionString1"];
MySqlConnection con = new MySqlConnection(conSettings.ToString());
MySqlCommand cmd = new MySqlCommand(@"select * from shopmanager.planning;", con);
MySqlDataReader myReader;
try
{
con.Open();
myReader = cmd.ExecuteReader();
while (myReader.Read())
{
//check if machine is "en attente"
string notPlanned;
notPlanned = myReader.GetString("machine_name");
if(notPlanned == "En attente")
{
return;
}
else
{
s.LabelForeColor = Color.Black;
s.Font = new System.Drawing.Font("Arial", 10f);
var start_date = myReader.GetDateTime("predicted_start_date");
var predicted_finish_date = myReader.GetDateTime("predicted_delivery");
var machine = myReader.GetString("machine_name");
int pix = s.Points.AddXY(machine, start_date, predicted_finish_date);
s.Points[pix].Label = myReader.GetString("project_number") + " " + myReader.GetString("part_name");
}
}
cmd.Parameters.Clear();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
con.Close();
}
您的问题来自将 x 值添加为字符串。这是一个常见的错误,尤其是因为一开始看起来一切都很好。此外,由于有时只是 没有数值 ;你的机器有名字,城市不是数字,ID 可能是也可能不是数字。人们的名字从来都不是等等。所以有很多原因可以解释为什么要添加非数字 x 值。
但它们只是添加到自动标签中,实际的 x 值都是 0
,因此无法正确分组或用于其他用途。这可能是也可能不是问题。您需要分组,所以这是一个问题!
所以,如果您没有可以使用的号码,您必须补一些。
这是一个示例,它将所有(新)名称填充到 Dictionary
作为 Keys
并将它们的索引添加为数字 Value
:
// maybe best at class level
Dictionary<string, int> machines = new Dictionary<string, int>();
// your reading loop here..
..
string machine = ..// your retrieval code here
if (!machines.ContainsKey(machine) ) machines.Add(machine, machines.Count);
// now add the point:
int px = yourSeries.Points.AddXY(machines[machine], yourYvalue1, yourYvalue2);
yourSeries.Points[px].AxisLabel = machine;
..
// loopend