DataView ToTable()得到新的table对象,
当对这个新的table对象中的row 进行delete()时,是直接删除掉,而不是将row的状态设置为DataViewRowState.Deleted
测试:
/// <summary>
/// 过滤功能
/// </summary>
static void Filtersss(DataSet ds)
{
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
DataTable newTable = null;
newTable = ds.Tables[0].DefaultView.ToTable();
newTable.Rows[0]["SourceTableKey"] = "Id=000000";
ds.Tables[0].Rows[0].Delete();
newTable.Rows[0].Delete();
}
}
为以下情况时候:
/// <summary>
/// 过滤功能
/// </summary>
static void Filtersss(DataSet ds)
{
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
DataTable newTable = null;
newTable = ds.Tables[0].DefaultView.ToTable();
newTable.Rows[0]["SourceTableKey"] = "Id=000000";
//ds.Tables[0].Rows[0].Delete();
//newTable.Rows[0].Delete();
}
}
Ds中第一条记录的SourceTableKey不变化
继续测试
/// <summary>
/// 过滤功能
/// </summary>
static void Filtersss(DataSet ds)
{
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
DataTable newTable = null;
newTable = ds.Tables[0].DefaultView.ToTable();
newTable.Rows[0]["SourceTableKey"] = "Id=000000";
ds.Tables[0].Rows[0].Delete();
//newTable.Rows[0].Delete();
}
}
newTable中的第一条记录依然存在,newTable中第一条记录没有变化
继续测试
/// <summary>
/// 过滤功能
/// </summary>
static void Filtersss(DataSet ds)
{
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
DataTable newTable = null;
newTable = ds.Tables[0].DefaultView.ToTable();
newTable.Rows[0]["SourceTableKey"] = "Id=000000";
//ds.Tables[0].Rows[0].Delete();
newTable.Rows[0].Delete();
}
}
ds中第一条记录依然没有被设置为deleted状态,但newTable第一条记录被删除
继续测试
/// <summary>
/// 过滤功能
/// </summary>
static void Filtersss(DataSet ds)
{
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
DataTable newTable = null;
newTable = ds.Tables[0].DefaultView.ToTable();
newTable.Rows[0]["SourceTableKey"] = "Id=000000";
ds.Tables[0].Rows[0].Delete();
newTable.Rows[0].Delete();
}
}
ds中第一条记录被设置为删除状态,deleted状态。newTable中第一条记录被删除,不见
据此推断ToTable()得到的Table对象,是个全新的对象,对源进行深Copy,但是一个问题始终未能理解,就是newTable中的Delete()为什么是直接删除掉,而不是设置Deleted状态?
比较的话,不要拿牛和马进行好不好。
我因不知道DataView.ToTable()的细节,才有此问题前来询问,而我问问题的目的在于解决问题,而不是听别人这样说,请勿跑题,谢谢
@Myisqq:
听不懂的话,你愿意思考也行,听不懂回答又不愿意不思考,我能有什么办法呢?
关键词
牛、马
ToTable()出来的记录都是Added状态,这个状态使用Delete()方法会被彻底删除掉