2012-03-12 26 views
1

我正在嘗試做一些你認爲非常簡單的事情。我正在從數據庫中檢索記錄以便在detailsview中顯示。但是,在向用戶顯示記錄之前,我想刪除dateTime值的時間戳。所以我試圖通過創建一個接收列名和數據行實例的函數來完成以下工作。在代碼中更新數據表中的數據行

protected void FormatDateFromRow(string columnName, DataRow row) 
     { 
     if (row[columnName] != DBNull.Value) 
     { 
      DateTime dateTime; 
      bool result = DateTime.TryParse(row[columnName].ToString(), out dateTime); 

      if (result) 
      { 
       row.BeginEdit(); 
       row[columnName] = dateTime.ToShortDateString(); 
       row.EndEdit(); 
       row.AcceptChanges(); 
      } 
     } 

    } 

我在一塊看起來像這樣的邏輯中使用了這種方法。

  if (dt != null) 
      { 
       if (dt.Rows.Count > 0 && dt.Columns.Contains("SystemName")) 
       { 
        DataRow row = dt.Rows[0]; 

        lblHeader.Text = row["SystemName"].ToString(); 

        FormatDateFromRow("GrantedDate", row); 
        FormatDateFromRow("ExpireDate", row); 
        dt.AcceptChanges(); 

        dvPackage.DataSource = dt; 
        dvPackage.DataBind(); 
       } 

但是,當顯示detailsView時,時間戳仍然存在。有人可以幫忙嗎?

感謝, GS

+0

您傳遞給格式方法的列的類型是什麼?如果您閱讀DateTime並嘗試存儲字符串,我想知道爲什麼這不會引發異常... – CodeZombie 2012-03-12 21:17:03

+0

數據庫中的列是DateTime,但傳入我的格式化方法的字符串是列的字符串名稱。 – gsirianni 2012-03-12 21:23:38

+0

轉換工作正常。當我添加dateTime.ToShortDateString(); 到監視列表它返回我想要存儲在r [columnName]中的值,但是當我像 – gsirianni 2012-03-12 21:26:13

回答

2

轉換到DateTime莫名其妙地在這條線失敗:

bool result = DateTime.TryParse(row[columnName].ToString(), out dateTime);

檢查這條線是否返回true。如果不考慮使用正確的Culture以便能夠轉換。

DateTime.TryParse Method (String, IFormatProvider, DateTimeStyles, DateTime)

希望這有助於。

+0

我的轉換工作正常。當我將它添加到監視列表中時,它包含我想要的值。只有當我將其分配給row [columnName]時,該值在數據綁定到detailsView之前不會持續存在。 – gsirianni 2012-03-12 21:28:29