Я пытаюсь сделать календарь с событиями, у которых есть дата начала и дата окончания, в календаре отображаются ежемесячные события. В моей программе есть следующие элементы:
- База данных (sqlite): со следующими столбцами и данными
EventName : Дни отпуска или работы
EventStartDate : 15.06.2020
EventEndDate : 15.08.2020
Мой календарь Выглядит так:
Мне удалось заполнить эти 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 бросать списки при заполнении данных?
Спасибо, я ценю помощь.