Row.RowState的状态变化。

此处问题纠结与再次没有好好审视MSDN官方解释。一开始没有去看,等到基本摸到问题的门路的时候发现MSDN官方解释的很翔实。再次汗颜,这里做篇文章,让将会有这方面问题的同学可以早点找到问题根本:

RowState MSDN Page:http://msdn.microsoft.com/en-us/library/system.data.datarowstate.aspx

我有一个很简单的DataRow状态判定函数,为了判定指定的DataRow是否被删除(该行没有在指定的DataTable.Rows中即视为删除)

        void CashDeleted(DataRow dr)
{
if (dr.RowState == DataRowState.Deleted)
{
Console.WriteLine("Cash Deleted!");
}
}

然而,在运行过程中竟然没有达到预想的效果,有些删除事件并不会在控制台输出Cash Deleted!。调试发现,删除过程到if判断时,获取的RowState为Detached。误认为,删除后的行状态为Detached股将此判断更改为判定是否等于Detached状态。在此调试,发现原本可以输出的删除事件竟然没有了效果。于是将此判断改为判定是否等于Deleted或Detached状态。终于可以看到预想效果了,但是心中不甚了了。为何有些是Detached有些是Deleted状态呢?后来通过如下啰哩啰唆的代码测试:

            DataTable db = new DataTable();
db.Columns.Add("Test");
DataRow dr = db.NewRow();
dr.Delete();
dr = db.NewRow();
db.Rows.Add(dr);
dr.Delete();
dr = db.NewRow();
db.Rows.Add(dr);
db.AcceptChanges();
dr.Delete();
dr = db.NewRow();
db.Rows.Add(dr);
dr["Test"] = "ads";
dr.AcceptChanges();
dr.Delete();

发现没有添加到DataTable中的行删除则为Detached,添加之后则为Deleted。到此才想起去看看MSDN对RowState的说明,天啊,人家早就已经说过了(悲剧哉):

Detached该行已被创建,但不属于任何 DataRowCollection。 DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。
Unchanged该行自上次调用 AcceptChanges 以来尚未更改。
Added该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。
Deleted该行已通过 DataRow 的 Delete 方法被删除。
Modified该行已被修改,AcceptChanges 尚未调用。



以上总结仍有失误,请自行测试...(Deleted状态的行依旧在DataTable中,调用了DataTable或该行的AcceptChanges之后,该行状态转变为Detached)

转载于:https://www.cnblogs.com/klvk/archive/2012/01/05/2312687.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值