一、在C#中,如果要删除DataTable中的某一行,大约有以下几种办法:
1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接删除行
2,datatable.Rows[i].Delete()。Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除,还可以通过datatable.RejectChanges()回滚,使该行取消删除。
如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows。因为正序删除时索引会发生变化。程式发生异常,很难预料后果。
for (int i = dt.Rows.Count - 1; i >= 0; i--) { dtOGBHIS.Rows.RemoveAt(i); }
总结:
delete和remove
Delete的使用是 datatable.Rows[i].Delete();
Remove的使用是datatable.Rows.Remove(datatable.Rows[i]);
这两个的区别是,使用delete后,只是该行被标记为deleted,但是还存在,用Rows.Count来获取行数时,还是删除之前的行数.需要使用datatable.AcceptChanges()方法来提交修改.
而Remove方法则是直接删除.
如果在for循环里删除行的话,最好是使用delete方法,不然会出现count变化的情况.循环完后再使用AcceptChanges()方法提交修改,删除掉标记为deleted的行
二、如何获取DataTable某一列的某个值对应的哪一行数据和哪一行的数据在那一行:
DataTable dt = ******; DataRow[] rows = dt.Select("field=123"); if (rows.Length > 0) { int iIndex = dt.Rows.IndexOf(rows[0]); }