2008-10-15 52 views
4

我想將DataTable中的所有DateTime值轉換爲字符串。下面是該方法使用:設置DataRow中的項目值不起作用

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戰鬥,不幸的是我沒有選擇使用哪個組件。

+0

精心設計的API使正確的用法變得簡單和不正確的用法變得困難或不可能,並且大多數內置的API用於像C#這樣的更現代化的語言,都設計良好。作爲一般規則,如果您發現自己以這種方式與API作鬥爭,現在是時候重新考慮您正在嘗試做什麼。 – 2008-10-15 11:46:17

回答

6

它可能已經確定列數據類型是日期時間,將值重新保存到日期時間的值重新裝箱。

試試這個...... 在數據表中創建一個新的列作爲TypeOf(字符串),並將字符串值保存到該列中。當所有的值都被複制後,刪除日期時間列。

+0

我用你的解決方案和Biri的信息解決了它。謝謝你們倆。 – 2008-10-15 12:10:44

14

這根本行不通,因爲你沒有改變下層的數據類型。

您有一個DataTable,其中有一個數據類型爲DateTime的列。

您可以爲它分配一個字符串,但它會轉換回日期時間。

爲什麼要將其更改爲格式化的字符串?只有在需要顯示時才能格式化,並且必須處理爲DateTime,直到必須顯示它爲止?

更新:,也更好,如果你檢查列的類型,你嘗試轉換之前,可以更快:

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

它不會工作,因爲該列的DataType仍然是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"); 
    } 
    } 
} 

生成字符串列然後你就可以刪除所有日期時間列或使用dataTable.Select()只得到你所需要的列。 PS:我沒有測試代碼,這取決於你。