C#:如何调整用户在DataGridView中输入的值?

时间:2009-06-24 12:34:15

标签: c# data-binding datagridview

我有一个数据绑定DataGridView。数据源是一个类型化数据集,其中包含两个DateTime列(BeginTimeStampEndTimeStamp)的表。我使用类型化数据集的Update命令将数据读写到SQL Server 2005数据库。

用户必须在两列中的每一列中输入日期,我使用CellValidatingRowValidating事件强制执行此操作。但是,我还需要确保适用以下两条规则:

  1. BeginDate列的时间值必须始终为00:00:00
  2. EndDate列的时间值必须始终为23:59:59(如果您愿意,也可以是晚上11:59:59)
  3. 由于我不希望用户一直进入23:59:59,我想以某种方式根据我的代码中的1.和2.更改用户的输入。

    我在哪里以及如何做到这一点?

    修改

    很抱歉,如果我不清楚的话。用户可以输入任何日期部分,但BeginTimeStamp的时间部分固定为午夜,EndTimeStamp的时间部分固定为23:59:59。

    示例:

    用户输入2009/01/01 01:00:00 pm BeginTimeStamp。我的申请应该改为2009/01/01 00:00:00。

    用户输入2009/01/31 01:00:00 pm EndTimeStamp。我的申请应该改为2009/01/31 23:59:59。

4 个答案:

答案 0 :(得分:2)

我只是将DateTime显示为日期并在幕后添加时间。

这可能是用户输入数据时,或者同样可能是您将数据写入数据库时​​。

如果选择前者,请查看DataGridView.CellEndEdit事件。

请参阅Noam对代码设置时间的答案。

答案 1 :(得分:1)

在进行其他验证后,您可以在CellValidating方法中添加以下行

DateTime newValue = oldValue.Date;

DateTime newValue = oldValue.Date.AddDays(1).AddSeconds(-1);

答案 2 :(得分:0)

我不确定我是否关注,用户必须输入两个日期的值,但它们始终相同?如果我理解正确,为什么不在数据库中设置默认值,那么当您读入数据集时,值已经存在

答案 3 :(得分:0)

您还可以在属性设置器中进行验证:

 public DateTime BeginTimeStamp
 {
     get { return _dateTime; }
     set
     {
         // force the time to whatever you want
         _dateTime = value.Date;
     }
 }