显示不必要更改的 C# 图表
本文关键字:图表 不必要 显示 | 更新日期: 2023-09-27 18:33:46
图表中不必要的更改(图像链接) 我正在研究 C#,Winform.这是我的代码.我正在尝试按图表显示所选日期的注册人数 这在第一次选择日期时完美运行 从日期时间选择器,但在第二次选择和第二次时间按钮单击它显示意外的变化(请参阅图像以完美理解)。所以我不希望每次用户选择日期时都想要这种更改,他必须获得只有 5 个柱的完美输出。我该怎么做?请帮忙!提前谢谢。
private void LoadChart_Click(object sender, EventArgs e)
{
string date1 = dateTimePicker1.Value.ToString("dd-MM-yyyy");
string date2 = dateTimePicker1.Value.AddDays(1).ToString("dd-MM-yyyy");
string date3 = dateTimePicker1.Value.AddDays(2).ToString("dd-MM-yyyy");
string date4 = dateTimePicker1.Value.AddDays(3).ToString("dd-MM-yyyy");
string date5 = dateTimePicker1.Value.AddDays(4).ToString("dd-MM-yyyy");
string cmdTextDate = "SELECT * FROM AllInOneTable WHERE Date=@Date";
OleDbCommand commandDate = new OleDbCommand(cmdTextDate, my_con);
commandDate.CommandText = cmdTextDate;
commandDate.Parameters.AddWithValue("@Date", date1);
DataSet data = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(commandDate);
da.Fill(data);
int a = data.Tables[0].Rows.Count;
string cmdTextDate2 = "SELECT * FROM AllInOneTable WHERE Date=@Date";
OleDbCommand commandDate2 = new OleDbCommand(cmdTextDate2, my_con);
commandDate2.CommandText = cmdTextDate2;
commandDate2.Parameters.AddWithValue("@Date", date2);
DataSet data2 = new DataSet();
OleDbDataAdapter da2 = new OleDbDataAdapter(commandDate2);
da2.Fill(data2);
int b = data2.Tables[0].Rows.Count;
string cmdTextDate3 = "SELECT * FROM AllInOneTable WHERE Date=@Date";
OleDbCommand commandDate3 = new OleDbCommand(cmdTextDate3, my_con);
commandDate3.CommandText = cmdTextDate3;
commandDate3.Parameters.AddWithValue("@Date", date3);
DataSet data3 = new DataSet();
OleDbDataAdapter da3 = new OleDbDataAdapter(commandDate3);
da3.Fill(data3);
int c = data3.Tables[0].Rows.Count;
string cmdTextDate4 = "SELECT * FROM AllInOneTable WHERE Date=@Date";
OleDbCommand commandDate4 = new OleDbCommand(cmdTextDate4, my_con);
commandDate4.CommandText = cmdTextDate4;
commandDate4.Parameters.AddWithValue("@Date", date4);
DataSet data4 = new DataSet();
OleDbDataAdapter da4 = new OleDbDataAdapter(commandDate4);
da4.Fill(data4);
int d = data4.Tables[0].Rows.Count;
string cmdTextDate5 = "SELECT * FROM AllInOneTable WHERE Date=@Date";
OleDbCommand commandDate5 = new OleDbCommand(cmdTextDate5, my_con);
commandDate5.CommandText = cmdTextDate5;
commandDate5.Parameters.AddWithValue("@Date", date3);
DataSet data5 = new DataSet();
OleDbDataAdapter da5 = new OleDbDataAdapter(commandDate5);
da5.Fill(data5);
int f = data5.Tables[0].Rows.Count;
this.chart1.Series["Series1"].Points.AddXY(date1, a);
this.chart1.Series["Series1"].Points.AddXY(date2, b);
this.chart1.Series["Series1"].Points.AddXY(date3, c);
this.chart1.Series["Series1"].Points.AddXY(date4, d);
this.chart1.Series["Series1"].Points.AddXY(date5, f);
}
尝试清除序列(如下),然后重新添加新数据。不确定这是否是您想要的 100%,但似乎是这样。
Series.Points.Clear();
//for your code
this.chart1.Series["Series1"].Points.Clear();
另外要附带说明的是 - 您很少应该调用SELECT * FROM
或对数据库进行多次调用来检索可以通过单个查询完成的信息。
如果您使用的是 sql,请查看 GROUP BY
并UNION
SQL 查询的关键字。它将允许您将多个呼叫压缩为一个。然后,如果您认为需要,请根据需要将其分开。Linq在这里会派上用场。
此示例将向您展示我所谈论内容的概述,即使它在上下文中并不相同。但是,它更高级一些。