一、DataRow row = dt.NewRow();
一個DataRow對象剛被建立以後其狀態是Detached,是孤立的一個存在,因此創建了DataRow以後在DataRow中的單元填充了數據後還要經過
DataTable.Rows.Add(row);
方法將此DataRow添加到DataTable,DataRow添加到DataTable後, 這個DataRow的狀態就轉變爲Added。
當修改了這個DataRow後,這個DataRow狀態轉爲Modified,當用
DataRow.Delete()方法刪除DataRow後,DataRow狀態將轉爲Deleted,不過此行還存在在DataTable中的,只是狀態改變了,
這時用DataTable.Rows.Count查看行數,跟刪除前是同樣的。
一旦調用了DataTable.AcceptChanges();方法後,全部的行將根據不一樣的狀態作不一樣的處理,Added、Modified、Unchanged將保留當前值,Deleted的行將從DataTable中移除,最後全部的行的狀態都置爲Unchanged。當DataTable是從DataAdapter.Fill(DataSet,DataTable)方法填充而造成的,Fill()方法將自動調用AcceptChanges()方法,將DataTable的行狀態都置爲Unchanged。而且,若是Fill方法中指定的那個DataTable在要填充的那個DataSet不存在時,會生成一個跟數據源表一樣的結構的DataTable並填充數據,數據庫跟着一塊兒變化了數據庫
二、只有在調用了DataTable.Remove(DataRow)方法後,此DataRow才被從DataTable移除,狀態也回覆到Detached孤立狀態,然後臺數據庫沒有變化。編程
用於從 DataTable 對象中刪除 DataRow 對象的方法有兩種:DataRowCollection 對象的 Remove 方法和 DataRow 對象的 Delete 方法。Remove 方法從 DataRowCollection 中刪除 DataRow,而 Delete 方法只將行標記爲刪除。當應用程序調用 AcceptChanges 方法時,纔會發生實際的刪除。經過使用 Delete,您能夠在實際刪除以前先以編程方式檢查哪些行標記爲刪除。若是將行標記爲刪除,其 RowState 屬性會設置爲 Deleted。對象
因此:
在將 DataSet 或 DataTable 與 DataAdapter 和關係型數據源一塊兒使用時,用 DataRow 的 Delete 方法移除行。
Delete 方法只是在 DataSet 或 DataTable 中將行標記爲 Deleted,而不會移除它。
而 DataAdapter 在遇到標記爲 Deleted 的行時,會執行其 DeleteCommand 方法以在數據源中刪除該行。
而後,就能夠用 AcceptChanges 方法永久移除該行。io
若是使用 Remove 刪除該行,則該行將從表中徹底移除,但 DataAdapter 不會在數據源中刪除該行。後臺