我前面用dt.Rows.Remove (i)一行数据

DataTable dt_D = dt.GetChanges(DataRowState.Deleted);但是无法获取delete的行?
完整的代码是
if(MyBox.Checked)
{
dt.Rows.Remove(dt.Rows[i]);
//dt.Rows.Add(dt.NewRow());
}
}
ViewState["source"] = dt;
this.dg_Modify.DataSource = ViewState["source"];
this.dg_Modify.DataBind();DataTable dt = (DataTable)ViewState["source"];DataTable dt_D = dt.GetChanges(DataRowState.Deleted);//该dt_D为空

解决方案 »

  1.   

    先要明白 Table.Rows.Remove( i ) 和 Table.Rows[i].Delete( ) 之间的区别:
    Table.Rows.Remove 方法是把一行从 Rows 集合中删除
    Table.Rows[i].Delete( ) 方法只是把一个行的状态设置为删除状态,但并没有从 Rows 集合中给删除。所以当你调用 Table.Rows.Remove( i ) 方法后,在调用 Table.GetChanges 方法来取得删除的行,肯定是取不到被删除的行,而使用Table.Rows[i].Delete( )方法删除行就可以取到。
      

  2.   

    Remove()是彻底删除,Delete() 是标志为 删除。楼主对比就知道了
      

  3.   

    不会,datagrid,还需要进一步的学习,帮忙顶一下
      

  4.   

    楼主把REMOVE方法和DELETE方法搞混了,二者是不一样的,你Remove掉Delete当然读不到了。
      

  5.   

    Detached 可以取到這個datatable吗?
      

  6.   

    那我怎么才能取到dt.Rows.Remove(dt.Rows[i]);的datatable呢?
      

  7.   

    不要使用dt.Rows.Remove(dt.Rows[i]);
    而是使用dt.Rows[i].Delete( );
      

  8.   

    谢谢exboy,但是我改了以后用
    foreach(DataRow dr in dt_D.Rows)
    {
    strSql =  "use "+wuser.CurrentCorpDB +"  delete AssetDeptBorrow_detail where nvrAssetBorrowNo='"+txb_Number.Text.ToString() +"' and "+"nvrAssetNo='" + dr[0].ToString().Trim()+"'";
    }
    就抱错误
    System.Data.DeletedRowInaccessibleException: Deleted row information cannot be accessed through the row. at System.Data.DataRow.GetDefaultRecord() at System.Data.DataRow.GetRecordFromVersion(DataRowVersion version) at System.Data.DataRow.get_Item(DataColumn column, DataRowVersion version) at System.Data.DataRow.get_Item(DataColumn column) at System.Data.DataRow.get_Item(Int32 columnIndex) at CECERP.IE.Asset.AssetTransfer.AssetDeptBorrow.Save()
      

  9.   

    很急,帮忙看看
    用了dt.Rows[i].Delete( );DataTable dt_D = dt.GetChanges(DataRowState.Deleted);
    后无法用
    dr[0].ToString()
    是怎么回事?
      

  10.   

    你上面写的有问题,改如下:
    strSql =  "use " + wuser.CurrentCorpDB + "  delete AssetDeptBorrow_detail where nvrAssetBorrowNo = '" + txb_Number.Text.ToString() + "' and " + nvrAssetNo = '" + dr[0].ToString().Trim() + "' ";
      

  11.   

    在 foreach(DataRow dr in dt_D.Rows) 这一句前面加一句
    dt_D.AcceptChanges( );