Я вижу пару вероятных проблем. Во-первых: ваше заявление о том, что делает проверки цвета. Для каждой строки в сетке данных он проходит все резервирования (не только резервирование, связанное с этой строкой), и если у какой-либо из них есть Enddate <= today, тогда эта строка становится красной. Так что, если у каких-либо резервирований есть Конечная дата <= сегодня, все они будут окрашены в красный цвет. Вместо этого вам нужно проверить, имеет ли резервирование, связанное с этой строкой, Конечную дату <= сегодня. </p>
Во-вторых, вам нужно поместить изменения стиля строки в событие DataBindingComplete
для DataGridView
, а не в ту же функцию, которая устанавливает источник данных. Я полагаю, что вы столкнулись с той же проблемой, на которую был дан ответ: https://stackoverflow.com/a/13560694/2263392
Итак, с обоими этими изменениями код выглядит примерно так:
public Form1()
{
InitializeComponent();
DateTime today = DateTime.Now;
var shortDate = today.Date.AddDays(0);
var ReservedCars = (from r in db.Reservation
select new ReservationRow(
r.ReservationId,
r.StartDate,
r.EndDate)).ToList();
dgvReservedCars.DataSource = ReservedCars;
}
private void dgvReservedCars_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
DateTime today = DateTime.Now;
var shortDate = today.Date.AddDays(0);
foreach (DataGridViewRow row in dgvReservedCars.Rows)
{
ReservationRow res = row.DataBoundItem as ReservationRow;
if (res.EndDate <= shortDate)
{
row.DefaultCellStyle.BackColor = Color.Red;
}
}
}
Где ReservationRow
- это просто:
public class ReservationRow
{
public int ReservationId { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public ReservationRow(int id, DateTime startDate, DateTime endDate)
{
ReservationId = id;
StartDate = startDate;
EndDate = endDate;
}
}