我有一个数据绑定DataGridView。数据源是一个类型化数据集,其中包含两个DateTime
列(BeginTimeStamp
和EndTimeStamp
)的表。我使用类型化数据集的Update
命令将数据读写到SQL Server 2005数据库。
用户必须在两列中的每一列中输入日期,我使用CellValidating
和RowValidating
事件强制执行此操作。但是,我还需要确保适用以下两条规则:
BeginDate
列的时间值必须始终为00:00:00 EndDate
列的时间值必须始终为23:59:59(如果您愿意,也可以是晚上11:59:59)由于我不希望用户一直进入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。
答案 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;
}
}