本身的删除例子(drTemp是表,gvSummary是dev 的gridview。单击右键点击grid删除):
1、dtTemp.Rows.RemoveAt(gvSummary.FocusedRowHandle);
2、dtTemp.Rows[gvSummary.FocusedRowHandle].Delete(); dtTemp.AcceptChanges();
在C#中,如果要删除DataTable中的某一行,大抵有以下几种步伐:
1.
如果只是想删除datatable中的一行,可以用DataRow的delete
,,但是必需要删除后让DataTable知道,所以就要用到.AcceptChanges()要领,原因是这种删除只是标识性删除,就像我们凡是在数据库顶用到的IsDelete字段。
Delete()之后需要datatable.AccepteChanges()要领确认完全删除,因为Delete()只是将相应列的状态标识表记标帜为删除,还可以通过datatable.RejectChanges()回滚,使该行打消删除。
2.
彻底删除就要用到datatable的.Rows.Remove(DataRow dr)要领
,同理也只是删除一行可以,如果要循环删除请继续往下看。
3.
循环彻底删除就要用.Rows.RemoveAt(int index)要领
,所以如果你是foreach的喜好者,在此请你换换口味,还有如果你是for的i++的忠实fans也但愿你能换个思维。先看一下上面措施的正向写法(错误的,不成用)
for (int i = 0, j = dt.Rows.Count; i < j; i++) { if (Convert.ToInt32(dt.Rows[i]["RowID"]) == RowID) dt.Rows.RemoveAt(i); }
这个的错误在于datatable的RemoveAt()会在删除后更新dataTable的index,所以你要删除的index可能已经不是你的切合Convert.ToInt32(dt.Rows[i][“RowID”]) == RowID的index了,甚者还会抛出异常,说你访谒的index不存在。
还是要慎用datatable.Rows.RemoveAt(i),若要删除多行,可以持续用Delete(),然后给与AccepteChanges()要领确认删除。
使用select要领:
先把要删除的记录符号一下,然后select删除行,实例代码如下:
for (int i = 0; i < len; i++) { if (((CheckBox)Rp.Items[i].FindControl("CB")).Checked) { dt.Rows[i]["C0"] = 1;//符号要删除的记录 } } foreach (DataRow r in dt.Select("c0=1")) { r.Delete(); } Rp.DataSource = dt; Rp.DataBind();