我在DataTable中创建列,如:
headerTable.Columns.Add(VendInvoice.Date, typeof(???));
我不知道如何添加日期列,我知道如何添加dateTime列。
答案 0 :(得分:1)
BCL中没有类型只实现没有时间的日期。
即使有,DataColumn
类也不支持它。 Here is the list of types you're allowed to use.对于按时间顺序排列的数据,您有DateTime
和TimeSpan
- 就是这样。
如果您想将此DataTable
传递给可能不知道所需的仅限日期语义的调用者,您可以执行的操作是将事件处理程序附加到DataTable
本身,从而重置时间:
private void DataTable_RowChanged(object sender, DataRowChangedEventArgs e)
{
if ((e.Action & DataRowAction.Add) != 0) ||
(e.Action & DataRowAction.Change) != 0))
{
DateTime dt = (DateTime)e.Row[DateColumn];
if (dt != dt.Date)
e.Row[DateColumn] = dt.Date;
}
}
// Later ...
dataTable.RowChanged += DataTable_RowChanged;
请注意,条件逻辑对于防止事件处理程序中的无限递归是必要的。
我真的不认为我会这样做,说实话。相反,当访问列中的值时,我只会使用DateTime.Date
方法,而不是担心写入时会发生什么。但是,如果由于某种原因您的域规则不允许您采用该方法,您可以使用上面的处理程序。