2011-02-23 66 views
1

我有以下代碼在DataRow中放置CreatedDate和ModifiedDate的好地方在哪裏?

public class SpecialItemRow : DataRow 
    { 
     public SpecialItemRow(DataRowBuilder builder) 
      : base(builder) 
     { 
      CreatedDate = DateTime.Now.ToLongTimeString(); 
     } 

     public string ItemName { get { return Convert.ToString(base["_ItemName"]); } set { base["_ItemName"] = value; _UpdateModifiedDate(); } } 
     public string Price { get { return Convert.ToString(base["_Price"]); } set { base["_Price"] = value; _UpdateModifiedDate(); } } 
     public string CreatedDate { get { return Convert.ToString(base["_CreatedDate"]); } set { base["_CreatedDate"] = value; _UpdateModifiedDate(); } } 
     public string ModifiedDate { get { return Convert.ToString(base["_ModifiedDate"]); } set { base["_ModifiedDate"] = value; } } 

     private void _UpdateModifiedDate() 
     { 
      ModifiedDate = DateTime.Now.ToLongTimeString(); 
     } 
    } 

它試圖自動設置改性和創建日期。但事實證明這些並不適合放置。有沒有其他可重寫的方法來設置這些值?謝謝。

+1

你如何實際創建這種類型的實例,因爲你不能真正得到DataRowBuilder的情況 - 沒有一個公共構造函數 - ? (或者我錯過了一些東西)。 – tzup 2011-02-23 10:39:37

+0

@tzup當你有一個相應的類型化的DataTable時,這個構造函數被調用,它的NewRowFromBuilder()被覆蓋以創建這種類型的DataRow。 – Jake 2011-02-23 12:53:52

回答

0

使用OnRowChanged(或OnRowChanging)在DataTable中執行此操作。例如,

public class SpecialItemTable : DataTable 
{ 

    protected override void OnRowChanged(DataRowChangeEventArgs e) 
    { 
     if (e.Action == DataRowAction.Add) 
     { 
     r.Row["CreatedDate"] = DateTime.Now; 
     } 
     else if (e.Action == DataRowAction.Change) 
     { 
     var time = DateTime.Now; 
     // Check to prevent the cascaded row change events 
     if ((time - (DateTime)e.Row["LastUpdated"]).TotalMilliseconds > 2) 
     { 
      e.Row["LastUpdated"] = time; 
     } 
     } 
    } 
} 

(免責聲明:未經測試的代碼 - 提供給只給一個想法)

相關問題