//delete并不是真的刪除 只是 將該row的rowstate變?yōu)?rowstate.delete(Rows.Count還是那么多)
//remove是 真的從datatable中刪除
比如:
ds.Tables[0].Rows[i].Delete();
ds.Tables[0].Rows.RemoveAt(i);
1. 使用myDataTable.Rows.RemoveAt(i)刪除行.
2. 使用myDataTable.Rows(i).delete 這時(shí)候需要使用 myDataTable.AcceptChanges 才能更新到數據庫.
注意一:
不要在循環(huán)里使用myDataTable.Rows.RemoveAt(i).因為每刪除一行后.i的值會(huì )增加,但行數會(huì )是減少了.這么做一定會(huì )出錯.
因此要遍歷數據,使用Remove方式時(shí),要倒序的遍歷
int count = ds.Tables[0].Rows.Count;
for (int i = count -1; i >=0; i--)
{
ds.Tables[0].Rows.RemoveAt(i);
}
注意二:
有時(shí)候發(fā)現使用ds.Tables[0].Rows[i].Delete();數據行也被直接刪除了,原因是在創(chuàng )建datatable時(shí)沒(méi)有執行AcceptChanges這個(gè)方法,那么在delete時(shí),不會(huì )標記,會(huì )直接刪除掉。
- #region 查詢(xún)合同概要信息表技術(shù)中最大合同ID
-
- DataTable dtPOTechnology = temp.Copy(); //dtPOTechnology按照【合同概要信息表技術(shù)】字段結構定義,保持一致
-
- //組裝dtPOTechnology結構
- dtPOTechnology.Columns.Add("UDA1");
- dtPOTechnology.Columns.Add("UDA2");
- dtPOTechnology.Columns.Add("UDA3");
- dtPOTechnology.Columns.Add("UDA4");
- dtPOTechnology.Columns.Add("UDA5");
-
- dtPOTechnology.AcceptChanges(); //如果你在創(chuàng )建datatable時(shí)沒(méi)有執行AcceptChanges這個(gè)方法,那么在delete時(shí),不會(huì )標記,會(huì )直接刪除掉。
- #endregion
-
- #region 檢查合同技術(shù)概要信息記錄是否存在明細為空,組裝temp
-
- if (dtTechnologyDetails.Rows.Count == 0) //沒(méi)有明細
- {
- //在temp中刪除這一行,使bulk方法不插入這一行
- //temp.Rows[i]["合同ID"] = dtTechnologyId.Rows[0]["合同ID"];
- dtPOTechnology.Rows[i].Delete();
- //poIdArrayList.Add(dtTechnologyId.Rows[0]["合同ID"]);
- dtReturn.Rows[i]["合同ID"] = dtTechnologyId.Rows[dtTechnologyId.Rows.Count - 1]["合同ID"];
- }
-
- dtPOTechnology.AcceptChanges();</span>
參考文獻
http://bbs.csdn.net/topics/390495321?page=1
http://www.cnblogs.com/hakuci/archive/2012/04/26/2471586.html