转换并将typedrow作为参数传递给自定义rowdeleted事件

时间:2014-11-11 17:07:01

标签: c#

我有自定义强类型数据表的基类。我在那里定义了一些可以被表覆盖的事件。 基类声明为:

public class RowEventArgs : EventArgs
{
    public TypedRow Row { get; set; }
    public bool Cancel { get; set; }
}

public abstract class TypedTable<TRow> : TypedTableBase<TRow> where TRow : TypedRow
{
    protected virtual void BeforeRowDeleted(RowEventArgs e) {}

在更新方法中,我为每一行启动了删除事件:

    public virtual int Update()
    {
        foreach (var r in this.Where(r => r.RowState == DataRowState.Deleted))
        {
            var e = new RowEventArgs() {Row = r.GetItemArray(DataRowVersion.Original) as TRow};
            BeforeRowDeleted(e);
            if (e.Cancel) return;
        }

        //Commit changes to DB
    }

TRow是类型表中行的类型,在实体声明

中指定
public sealed partial class Customer : TypedTable<CustomerRow>

它在部分类中消耗的事件如:

protected override void BeforeRowDeleted(RowEventArgs e)
{
   //Do something for that customer before deleting it
   var myRow = e.Row as CustomerRow;
   var cust = myRow.CustomerID;
}

我遇到的问题是对TRow的强制转换始终为null。 我如何将已删除的行传递给BeforeRowDeleted事件,以便根据该行的数据进行一些操作?

编辑:添加更多声明

public abstract class TypedRow : DataRow {}

public static object[] GetItemArray(this DataRow row, DataRowVersion version)
{
    var count = (row.Table).Columns.Count;
    var items = new List<object>(count);
    for (var i = 0; i < count; i++)
    {
        items.Add(row[i, version]);
    }
    return items.ToArray();
}

1 个答案:

答案 0 :(得分:0)

public static object[] GetItemArray(this DataRow row, DataRowVersion version)
{
    var count = (row.Table).Columns.Count;
    var items = new List<object>(count);
    for (var i = 0; i < count; i++)
    {
        items.Add(row[i, version]);
    }
    return items.ToArray();
}

返回列列表而不是行。项目包含n * Row [i,x],我怀疑它也是一行,所以对TRow的演员会失败