2011-02-23 46 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; 
     } 
     } 
    } 
} 

(免责声明:未经测试的代码 - 提供给只给一个想法)

相关问题