標籤:like temp plugin 清空 too 必須 命名規範 play point
本文執行個體講述了C#中DataTable刪除行的方法,分享給大家供大家參考之用。具體實現方法如下:
自己的刪除例子(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();
感興趣的朋友可以測試回合本文執行個體以加深理解,希望本文所述對大家C#程式設計的學習有所協助。
除聲明外,
跑步客文章均為原創,轉載請以連結形式標明本文地址
C#中DataTable刪除行的方法分析
本文地址: http://www.paobuke.com/develop/c-develop/pbk23491.html
相關內容C#實現百度ping推送功能的方法Windows系統中使用C#編寫藍芽通訊程式的簡單一實例詳解C#面相對象編程中的繼承特性C#實現清空資源回收筒的方法
C#實現Ping的方法小結C#如何解析http報文C#的winform控制項命名規範C#中String類常用方法匯總
C#中DataTable刪除行的方法分析