【发布时间】:2021-07-10 15:21:50
【问题描述】:
我有一个 Datagridview,其中包含航空公司的几列。其中一列是“出发”,另一列是“实际出发”。 Departure里面已经有时间了,但是Actual Departure没有,需要用户填写,它会变成某种颜色,如果在离开时间之后,它会再次变成另一种颜色。我遇到了这个问题,因为我正在尝试比较两列,但我认为它给了我一个错误,因为在实际出发时没有比较价值。 Actual Departure 直到运行时才具有价值,当用户填写它时。也许有人可以对正在发生的事情或如何解决问题有所了解。
有多个航班起飞,因此一个航班实际上可能先于另一个起飞,因此如果该特定航班的实际起飞时间仍为空白,则它需要能够跳到下一行。
我正在测试另一种执行此操作的方法,它在一定程度上有效,但如果没有填写之前的实际出发,那么该行将不会改变颜色 Example of old method
当我运行当前代码时,我得到一个错误:'字符串未被识别为有效'。
for (int i = 0; i < dgvRampBoard.Rows.Count; i++)
{
DateTime d1 = Convert.ToDateTime(dgvRampBoard.Rows[i].Cells[3].Value.ToString());
DateTime d2 = Convert.ToDateTime(dgvRampBoard.Rows[i].Cells[4].Value.ToString());
if (d1 < d2)
{
// this.dgvRampBoard.Rows[i].Cells[5].Style.BackColor = Color.Red;
this.dgvRampBoard.Rows[i].Cells[4].Style.BackColor = Color.FromArgb(247, 13, 26);
this.dgvRampBoard.Rows[i].Cells[4].Style.ForeColor = Color.White;
}
else if (d1 == d2)
{
this.dgvRampBoard.Rows[i].Cells[4].Style.BackColor = Color.Black;
this.dgvRampBoard.Rows[i].Cells[4].Style.ForeColor = Color.White;
}
else
{
this.dgvRampBoard.Rows[i].Cells[4].Style.BackColor = Color.FromArgb(0, 204, 0);
this.dgvRampBoard.Rows[i].Cells[4].Style.ForeColor = Color.White;
}
}
【问题讨论】:
-
你应该在
DateTime d1......之前做if(dgvRampBoard.Rows[i].Cells[4].Value == null || string.IsNullOrEmpty(dgvRampBoard.Rows[i].Cells[4].Value.ToString())) continue; -
这仍然给我:字符串未被识别为有效错误。
-
当然,还要检查字符串格式。我更喜欢使用 datetime.TryParse,如果 false 做其他事情或继续
-
您评论说...... “有多个航班起飞,因此一个航班实际上可能先于另一个航班起飞,因此如果实际起飞时间仍然为空白,它需要能够跳到下一行那个特定的航班。” ...在此之前您声明... “我遇到了这个问题,因为我正在尝试比较两列,但我认为它给了我一个错误,因为那里在 Actual Departure 中没有可比较的值。” ...您在这两个语句中都是正确的,但是发布的代码不会对任何网格单元格值为
null或空的值进行任何“检查”。 -
如前所述,
DateTime.TryParse将有助于确定单元格值是null还是string日期时间值的格式无效。
标签: c# datagridview compare