DataTable日期列

时间:2011-04-23 03:02:51

标签: c# .net ado.net datatable

我在DataTable中创建列,如:

headerTable.Columns.Add(VendInvoice.Date, typeof(???));

我不知道如何添加日期列,我知道如何添加dateTime列。

1 个答案:

答案 0 :(得分:1)

BCL中没有类型只实现没有时间的日期。

即使有,DataColumn类也不支持它。 Here is the list of types you're allowed to use.对于按时间顺序排列的数据,您有DateTimeTimeSpan - 就是这样。

如果您想将此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方法,而不是担心写入时会发生什么。但是,如果由于某种原因您的域规则不允许您采用该方法,您可以使用上面的处理程序。