C# C显示不必要更改的图表

C# C显示不必要更改的图表,c#,winforms,charts,C#,Winforms,Charts,我正在使用C,Winform。这是我的代码。我正在尝试通过图表显示在所选日期注册的人数,这在dateTimePicker首次选择日期时运行良好,但在第二次选择和第二次按钮时,单击它显示意外更改请参考图片以获得完全理解。所以我不希望每次it用户选择日期时都发生这种变化,他必须获得只有5条的完美输出。我怎么能做到呢?请帮忙!提前谢谢 private void LoadChart_Click(object sender, EventArgs e) { string date1

我正在使用C,Winform。这是我的代码。我正在尝试通过图表显示在所选日期注册的人数,这在dateTimePicker首次选择日期时运行良好,但在第二次选择和第二次按钮时,单击它显示意外更改请参考图片以获得完全理解。所以我不希望每次it用户选择日期时都发生这种变化,他必须获得只有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*或多次调用数据库来检索可以通过单个查询完成的信息

如果您使用的是sql,请查看sql查询的GROUPBY和UNION关键字。它将允许您将多个呼叫压缩为一个。然后,如果你认为需要的话,按你认为合适的方式分开。林克在这里会派上用场的


将向您展示我所说内容的概述,即使内容不尽相同。但是它有点高级。

我想您可能需要将其命名为.chart1.Series[Series1].Points.Clear,然后再添加点。目前,您似乎只是在每次单击按钮时再添加5个点,而没有首先清除在上一次单击中创建的点。是的,它100%适用于我:。我希望我能给喜欢这个答案,但我的声誉数字不允许它,当我赢得我的声誉,我一定会给喜欢这个答案:谢谢你加布:没有担心,也没有必要-在这里帮助不建立代表。祝你的应用程序好运你的代码是我的工作完美,但其他建议我也铭记在心