我有一个datagridview,我正在做很多东西,我知道我不应该这样做。你知道,遵循要求。Datagridview背景颜色显示在第二个数据绑定上
其中一项要求是根据某些值对每行的某个单元着色。我在ETA和Approved字段上执行此操作。这两个代码通常运行秒此代码运行。在某些行上,只有Approved字段,从不着色,直到我重新启动整个应用程序。为什么会发生?
- 我已验证所有引用的数据确实存在。
- 我已经验证了下面的着色线确实会被击中,即使是在第一次不着色的行上也是如此。
的WinForms/.NET 3.5
List<int>
ClinicIDs = new List<int>(),
ZoneIDs = new List<int>();
foreach (Clinic c in lb_Clinics_RM.SelectedItems)
ClinicIDs.Add(((Clinic)c).ID);
foreach (Zone z in lb_Zones_RM.SelectedItems)
ZoneIDs.Add(((Zone)z).ID);
if (lb_Clinics_RM.SelectedItems.Count == 0)
foreach (Clinic c in lb_Clinics_RM.Items)
ClinicIDs.Add(((Clinic)c).ID);
if (lb_Zones_RM.SelectedItems.Count == 0)
foreach (Zone z in lb_Zones_RM.Items)
ZoneIDs.Add(((Zone)z).ID);
dgRides.DataSource = from r in dc.Rides
where ((DateTime)r.ApptDatetime).Date == dtRides.Value.Date
&& (ZoneIDs.Contains((from c in r.Location.Clinics select c.Zone.ID).FirstOrDefault())
|| ZoneIDs.Contains((from c in r.Location1.Clinics select c.Zone.ID).FirstOrDefault()))
&& (ClinicIDs.Contains((from c in r.Location.Clinics select c.ID).FirstOrDefault())
|| ClinicIDs.Contains((from c in r.Location1.Clinics select c.ID).FirstOrDefault()))
orderby r.isRejected descending, r.ApptDatetime.Value, r.isApproved, r.PatientID
select new
{
r.ID,
PatientID = r.PatientID,
Approved = " ",
Appointment = r.ApptDatetime.Value.TimeOfDay,
RideID = r.ID,
ETA = r.ETA.TimeOfDay,
Clinic = (from c in dc.Clinics where c.Location.ID == r.Location.ID || c.Location.ID == r.Location1.ID select c).FirstOrDefault().Name,
Direction = (r.ApptDuration == 0 ? "Outbound" : "Inbound"),
LastName = r.Patient.LastName,
FirstName = r.Patient.FirstName,
From = r.Location.Clinics.Count() > 0 ? r.Location.Clinics.First().Name : r.Location.Address,
To = r.Location1.Clinics.Count() > 0 ? r.Location1.Clinics.First().Name : r.Location1.Address,
Driver = r.Driver.Name == "Unassigned" ? "" : r.Driver.Name,
Vehicle = r.Driver.Name == "Unassigned" ? "" : r.Driver.Vehicle.VehicleNumber
};
if (dgRides.Columns.Count == 0)
return;
// Format displayed rides
foreach (DataGridViewRow dr in dgRides.Rows)
{
if (dr.Index == -1) continue;
Ride ride;
try { ride = (from r in dc.Rides where r.ID == ((int)dr.Cells[0].Value) select r).First(); }
catch { continue; }
TimeSpan diff = ride.ETA - ride.ApptDatetime.Value;
Color fore;
dr.Cells["ETA"].Style.BackColor = Common.GetColorByLateness(diff.Minutes, out fore);
dr.Cells["ETA"].Style.ForeColor = fore;
if (ride.isApproved)
dr.Cells["Approved"].Style.BackColor = Color.Green;
else if (ride.isRejected)
dr.Cells["Approved"].Style.BackColor = Color.Red;
}
和
public static Color GetColorByLateness(int MinutesLate, out Color Foreground)
{
int
ETAYellowMinutes = int.Parse(Lookups.GetSetting("ETAYellowMinutes")),
ETARedMinutes = int.Parse(Lookups.GetSetting("ETARedMinutes"));
Foreground = Color.White;
if (MinutesLate > ETARedMinutes)
return Color.DarkRed;
else if (MinutesLate > ETAYellowMinutes)
return Color.FromArgb(100, 100, 0);
else
return Color.Green;
}
这是什么数据上下文对象?我有一个datagridview从SqlDataAdapter通过DataTable填充相同的问题。 – Derar 2011-02-17 23:19:46