【问题标题】:Changing DataType of column in DataTable from DateTime to String将 DataTable 中列的 DataType 从 DateTime 更改为 String
【发布时间】:2010-11-24 21:31:23
【问题描述】:

我正在将数据库中的数据加载到 DataTable 中,其中一列是日期字段。

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = "MySP";
    cmd.CommandType = CommandType.StoredProcedure;

    conn.Open();
    using (SqlDataReader rdr = cmd.ExecuteReader())
    {
        dt.Load(rdr);
    }
}

我想对该列进行格式化,使其不包含完整的日期,而是将其格式化为“MM/DD/YYYY”。

我尝试遍历表中的每一行并更改该列的单元格,但我收到一条错误消息,指出该字符串不是有效的 DateTime 对象。

我尝试将 DateType 列更改为字符串,但我收到一条错误消息,提示我在填满表格后无法更改 DateType。

我该怎么做?这似乎是一件很简单的事情,但我遇到了很多麻烦。

【问题讨论】:

  • 您在哪里以及如何使用此数据表?我会说你应该在你的 UI 层(例如作为数据源)上使用它时格式化日期,而不是之前。
  • 我将它绑定到 GridView。这些列是动态的,因此我无法在设计视图中对其进行格式化。列的索引也可以不同,所以也不像在 RowDataBound 事件中更改它那么容易。
  • 如果是这种情况,那么您可能希望在插入值之前将列类型设置为字符串并对其进行格式化。
  • @Aaron 他没有手动插入值,一切都由Load()内部处理
  • 我没有看到 sp。我会更改 sp 以返回格式化字符串而不是日期时间值。正如 Josh 指出的那样,基本上在 sp 中进行格式化。

标签: c# .net asp.net


【解决方案1】:

作为一种解决方法,您可以创建一个新列并将格式化的日期存储在那里:

dt.Columns.Add("DateStr");

foreach (DataRow dr in dt.Rows)
{
    dr["DateStr"] = string.Format("{0:MM/dd/yyyy}", dr["OriginalDate"]);
}

【讨论】:

    【解决方案2】:

    使用CONVERT更改您的存储过程以将字段转换为字符串...

    SELECT CONVERT(varchar, DateFieldName, 101) AS DateFieldNameFormatted
    

    101 是 mm/dd/yyyy 的格式代码(其他代码/格式见链接)

    【讨论】:

      【解决方案3】:

      您不能格式化 DateTime struct 值。不要那样想。它的目的是保存一个值,表示:

      一个瞬间,通常是 表示为日期和时间。

      您只能在将该实例的值转换为字符串时指定格式。保持您的 DataTable 架构不变。无论您需要在何处对其进行格式化,请查看一些可以与ToString(string) 方法一起使用的formats

      【讨论】:

        猜你喜欢
        • 2010-11-12
        • 1970-01-01
        • 2020-07-30
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 2016-09-03
        相关资源
        最近更新 更多