【问题标题】:Where is a good place to tuck CreatedDate and ModifiedDate in a DataRow?将 CreatedDate 和 ModifiedDate 放入 DataRow 的好地方在哪里?
【发布时间】:2011-02-23 10:12:01
【问题描述】:

我有以下代码

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

它尝试自动设置修改和创建的日期。但事实证明,这些不是放置的正确位置。是否有任何其他可覆盖的方法来设置这些值?谢谢。

【问题讨论】:

  • 您如何实际创建这种类型的实例,因为您无法真正获得 DataRowBuilder 的实例 - 没有公共构造函数 - ? (或者我可能遗漏了什么)。
  • @tzup 当您有一个相应的类型化 DataTable 时调用此构造函数,其 NewRowFromBuilder() 被覆盖以创建此类型化 DataRow。

标签: c# .net datarow


【解决方案1】:

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

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

(免责声明:未经测试的代码 - 仅供参考)

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多