【问题标题】:Comparing Times in Datagridview在 Datagridview 中比较时间
【发布时间】: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


【解决方案1】:

使用TimeSpan。将time 转换为TimeSpan 并进行比较。

for (int i = 0; i < dgvRampBoard.Rows.Count; i++)
{
    TimeSpan t1 = TimeSpan.Parse(dgvRampBoard.Rows[i].Cells[3].Value.ToString());
    TimeSpan t2 = TimeSpan.Parse(dgvRampBoard.Rows[i].Cells[4].Value.ToString());



    if (TimeSpan.Compare(t1, t2) == -1)
    {
       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 (TimeSpan.Compare(t1, t2) == 0)
    {
       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;
    }
}

【讨论】:

    猜你喜欢
    • 2016-07-28
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多