我有自定义强类型数据表的基类。我在那里定义了一些可以被表覆盖的事件。 基类声明为:
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();
}
答案 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的演员会失败