代码之家  ›  专栏  ›  技术社区  ›  Serhat Ozgel

在数据行中设置项的值不起作用

  •  4
  • Serhat Ozgel  · 技术社区  · 16 年前

    我正在尝试将数据表中的所有日期时间值转换为字符串。以下是我使用的方法:

    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]的值,发现它仍然是日期时间,而不是字符串。为什么会发生这种情况?我如何解决?

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

    3 回复  |  直到 16 年前
        1
  •  6
  •   StingyJack    16 年前

    它可能已确定列数据类型为日期时间,并且在将值保存回该列时正在将值重新绑定到日期时间。

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

        2
  •  14
  •   Biri    16 年前

    这根本不起作用,因为您没有更改参考资料数据类型。

    您有一个数据表,其中一列的数据类型为datetime。

    您可以为它分配一个字符串,但它将转换回日期时间。

    为什么要将其更改为格式化字符串?您不能只在需要显示它时格式化,并将其作为日期时间处理,直到必须显示它为止吗?

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

    if (dataTable.Columns[0].DataType == typeof(DateTime))
    {
    }
    
        3
  •  1
  •   Eduardo Campañó    16 年前

    因为列的数据类型仍然是datetime,所以它无法工作,它将把字符串转换回datetime。 我建议在生成API消息时将日期格式化为字符串。如果仍然需要为日期时间值生成字符串列

    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");
         }
       }
    }
    

    然后您可以删除所有日期时间列,或者使用dataTable.select()只获取所需的列。 附言:我没有测试代码,这取决于你。