Заполнение календаря C# между двумя датами - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь сделать календарь с событиями, у которых есть дата начала и дата окончания, в календаре отображаются ежемесячные события. В моей программе есть следующие элементы:

  • База данных (sqlite): со следующими столбцами и данными
    EventName : Дни отпуска или работы
    EventStartDate : 15.06.2020
    EventEndDate : 15.08.2020

Мой календарь Выглядит так: enter image description here

Мне удалось заполнить эти ListViews за текущий месяц с (15.06.2020) по (31.06.2020), только когда я go до следующего месяц я не мог получить данные для продолжения заполнения ListViews. Вот мой код:

 SQLiteDataReader sqlite_datareader;
            SQLiteCommand sqlite_cmd;
            sqlite_cmd = sqlite_conn.CreateCommand();
            sqlite_cmd.CommandText = "SELECT * from Jobs where strftime('%m',JOBDATE) = @month and strftime('%Y',JOBDATE) = @year";
            sqlite_cmd.Parameters.AddWithValue("@month", a.Month.ToString("00"));
            sqlite_cmd.Parameters.AddWithValue("@year", a.Year.ToString());
            sqlite_conn.Open();
            sqlite_cmd.ExecuteNonQuery();
            int jobday;

            sqlite_datareader = sqlite_cmd.ExecuteReader();
            backgroundWorker1.ReportProgress(50,"Start Getting Data");
            while (sqlite_datareader.Read())
            {
                if (!sqlite_datareader.IsDBNull(6))
                {
                    // Get Job Start Date
                    string jobdate = DateTime.ParseExact(sqlite_datareader.GetString(6), "yyyy-MM-dd", null).ToString("dd");
                    jobday = Int32.Parse(jobdate);

                    // Check How many days the job is:
                    int jobdays;
                    if (!sqlite_datareader.IsDBNull(8)) { jobdays = Int32.Parse(DateTime.ParseExact(sqlite_datareader.GetString(8), "yyyy-MM-dd", null).ToString("dd")); }
                    else { jobdays = 1; }

                    for (jobday = Int32.Parse(jobdate); jobday <= jobdays; jobday++)
                    {
                        ListView jobofday = (ListView)Controls.Find(string.Format("job" + jobday), false).FirstOrDefault();
                        // Set Color Listview
                        Invoke((MethodInvoker)delegate
                        {
                            jobofday.BackColor = Color.White;
                            jobofday.Columns.Add("JobName");
                            jobofday.Columns.Add("JobLocation");
                            jobofday.Columns.Add("JobDate");
                        });
                        string string1 = sqlite_datareader.GetString(1);
                        if (sqlite_datareader.GetString(1) == "OFFDAYS")
                        {
                            totaldaysoff++; Invoke((MethodInvoker)delegate

{ jobofday.BackColor = Color.Green; });
                        }
                        Invoke((MethodInvoker)delegate
                        {
                            jobofday.Items.Add(string1);
                            jobofday.Items[0].ImageIndex = 0;
                        });
                        if (!sqlite_datareader.IsDBNull(2) || !sqlite_datareader.IsDBNull(3))
                        {
                            string string2 = sqlite_datareader.GetString(2);
                            string string3 = sqlite_datareader.GetString(3);
                            Invoke((MethodInvoker)delegate
                            {
                                jobofday.Items[0].SubItems.Add(string2);
                                jobofday.Items[0].SubItems.Add(string3);
                            });
                        }
                    }
                }


            }
            sqlite_conn.Close();

Мои вопросы:
1- Как я могу получить данные за 6, 7 и 8 месяц? какие изменения необходимо внести в код?
2- Есть ли лучший способ l oop бросать списки при заполнении данных?

Спасибо, я ценю помощь.

...