首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从部分类中检测DataRow更改

从部分类中检测DataRow更改
EN

Stack Overflow用户
提问于 2019-05-21 00:08:49
回答 1查看 0关注 0票数 0

假设我有一个表示域对象的接口:

public interface IFoo
{
    Bar Bar { get; }
}

Bar类型是一系列对象,每个对象的架构略有不同。在数据库中,这被表示为XML(这是一个移动应用,因此它是简单地nvarchar真正的XML列)。

我有一个DataSet包含一个FooDataTable和相应FooRow对象的生成:

// AcmeDataSet.designer.cs

public partial class FooRow : DataRow
{
    public string BarXml
    {
        // Generated get and set
    }
}

我想实现IFoo并缓存反序列化的实例Bar

// FooRow.cs

public partial class FooRow : IFoo
{
    private Bar _bar;

    Bar IFoo.Bar
    {
        get { return _bar; }
    }
}

我怎样才能从部分类中确定值的BarXml变化?

我意识到FooDataTable包含ColumnChangingColumnChanged事件,但我不知道如何订阅它们。没有类似于Linq到Sql的OnCreated部分方法,我不知道另一种方法来挂钩生成的构造函数。

EN

回答 1

Stack Overflow用户

发布于 2019-05-21 09:58:46

如果我理解正确,那么你的FooRow对象(实例)是从Type DataRow派生的某种类型的实例......如果是这样,那么因为DataRow有一个引用DataTable的属性,所以只需将你的IFoo变量转换为DataRow ,

在FooRow里面

  public partial class FooRow
  {    
       private void myColumnChanging Handler(object sender, EventArgs e)
       {
            // Implementation
       }
       private void myColumnChanged Handler(object sender, EventArgs e)
       {
            // Implementation
       }
       public void RegisterEvents()
       {
          ((DataRow)this).Table.ColumnChanging += myColumnChanging; 
          ((DataRow)this).Table.ColumnChanged += myColumnChanged; 
       }
   }

然后,在FooDataTable类中,添加一个新的工厂方法MyNewFooRow()

public class FooDataTable 
{
    //  -- Other implementation
    public FooRow MyNewFooRow()
    {
        FooRow fr = this.NewFooRow(); // call the original factory
        fr.RegisterEvents();
        return fr;
    }
 }

无论你在哪里使用旧工厂,都要使用这个新工厂......

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档