设置DataRow中项目的值不起作用

时间:2008-10-15 11:33:39

标签: c# datarow

我正在尝试将DataTable中的所有DateTime值转换为字符串。这是我使用的方法:

private static void ConvertDateTimesToStrings(DataTable dataTable)
{
    if (dataTable == null)
    {
        return;
    }

    for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++ )
    {
        for (int i = 0; i < dataTable.Columns.Count; i++)
        {
            DateTime dateTime;
            try
            {
                dateTime = (DateTime)dataTable.Rows[rowIndex][i];
            }
            catch (InvalidCastException)
            {
                continue;
            }
            dataTable.Rows[rowIndex][i] = dateTime.ToString("dd.MM.yyyy hh:mm:ss");
        }
    }
}

此行之后:

dataTable.Rows[rowIndex][i] = dateTime.ToString("dd.MM.yyyy hh:mm:ss");

我检查dataTable.Rows [rowIndex] [i]的值,看它仍然是DateTime,而不是字符串。为什么会发生这种情况,我该如何解决?

编辑:我正在尝试这样做,因为我正在与api战斗,不幸的是我没有选择使用哪个组件。

3 个答案:

答案 0 :(得分:14)

这根本不起作用,因为您没有更改底层数据类型。

您有一个DataTable,其列的数据类型为DateTime。

您可以为其指定一个字符串,但它会转换回DateTime。

为什么要将其更改为格式化字符串?您是否只能在需要显示时进行格式化,并在必须显示之前将其作为DateTime处理?

更新:如果您在尝试转换之前检查列的类型也会更好,它可以更快:

if (dataTable.Columns[0].DataType == typeof(DateTime))
{
}

答案 1 :(得分:6)

可能已经确定列数据类型是日期时间,并且在将值保存到那里时将值重新装箱到datetime。

试试这个...... 在数据表上创建一个新列作为TypeOf(String),并将字符串值保存到该列中。复制完所有值后,请删除日期时间列。

答案 2 :(得分:1)

由于列的DataType仍然是DateTime,它将无效,它将把字符串转换回datetime。 我建议在生成API消息时将日期格式化为字符串。如果仍需要为datetime值生成字符串列

foreach (DataColumn column in dataTable.Columns) {
  if (column.DataType == typeof(DateTime)) {
    dataTable.Columns.Add(column.ColumnName + "_string", typeof(string));
  }
}

foreach (DataRow row in dataTable.Rows) {
   foreach (DataColumn column in dataTable.Columns) {
     if (column.DataType == typeof(DateTime)) {
       row[column.ColumnName + "_string"] = row[column.ColumnName].ToString("dd.MM.yyyy hh:mm:ss");
     }
   }
}

然后,您可以删除所有DateTime列或使用dataTable.Select()来仅获取所需的列。 PS:我没有测试代码,这取决于你。