1

開始日と終了日の 2 つの日付から生成できるグラフを作成したいと考えています。msdn でチャート コントロールについてしばらく調べたところ、思いつきました。しかし、私はいくつかの問題にぶつかっています。

その週の各日、可能な複数の週の数を表すグラフ。Y 軸は金額を表し、X 軸は週番号を表します。

したがって、シリーズは月曜日から日曜日までの曜日です。説明の最後に、私の言いたいことを理解してもらうための小さな例を示します。開始日: 2013 年 1 月 1 日 終了日: 2013 年 1 月 18 日

DB から情報を取得し、行ごとに日付を返します。日付を分割して、DateTime で曜日名を取得します。

2013 年 1 月 1 日の金額が 26 だったとすると、2013 年 1 月 1 日の日付で 26 行が得られます。DateTime を使用して火曜日を確認し、シリーズの火曜日にチャートに配置する必要があります。これは毎日の場合で、新しい週が始まるときは、最初の火曜日ではなく、今週の火曜日に追加する必要があります。

これは私が現在持っているコードです(テストは切り取られています)

        string ksubConnectionString = @"Data Source=xx.xx.x.x\xxxxxx;Initial Catalog=xxxxxxxxxxxx;
        User ID=xxxxxxx;Password=xxxxxxxxxxxx;";
        SqlConnection connection = new SqlConnection(ksubConnectionString);
        SqlCommand cmd = connection.CreateCommand();
        connection.Open();

        // Query for data graph
        cmd.CommandText = "SELECT closedDateTime FROM kasadmin.SDIncident WHERE closedDateTime < '" + textBox2.Text + " 23:59:59.000' AND closedDateTime > '" + textBox1.Text + " 00:00:00.001' ORDER BY closedDateTime ASC";
        richTextBox1.Text = "";
        SqlDataReader rdr = cmd.ExecuteReader();
        if (rdr.HasRows)
        {
            List<string> ArrayDates = new List<string>();

            for (int i = 0; rdr.Read(); i++)
            {
                ArrayDates.Add(rdr.GetDateTime(0).ToString());
            }
            string[] SplittedDate;
            string[] DatetimeSplit;
            int Jaar;
            int Maand;
            int Dag;
            for (int k = 0; k <ArrayDates.Count;k++ )
            {
                SplittedDate = ArrayDates[k].Split(' ');
                DatetimeSplit = SplittedDate[0].Split('-');
                Jaar = Convert.ToInt32(DatetimeSplit[2].ToString());
                Maand = Convert.ToInt32(DatetimeSplit[1].ToString());
                Dag = Convert.ToInt32(DatetimeSplit[0].ToString());
                DateTime dt = new DateTime(Jaar, Maand, Dag);

                if (dt.DayOfWeek.ToString() == "Monday")
                {
                    this.chart1.Series[0].Points.AddY(1);
                }
                if (dt.DayOfWeek.ToString() == "Tuesday")
                {
                    this.chart1.Series[1].Points.AddY(1);
                }
                if (dt.DayOfWeek.ToString() == "Wednesday")
                {
                    this.chart1.Series[2].Points.AddY(1);
                }
            }
        }
        else
        {
            richTextBox1.Text = "No rows found.";
        }

        rdr.Close();
        connection.Close();
4

0 に答える 0