程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> DataTable循環刪除行,datatable循環刪除

DataTable循環刪除行,datatable循環刪除

編輯:C#入門知識

DataTable循環刪除行,datatable循環刪除


  1.如果只是想刪除datatable中的一行,可以用DataRow的delete,但是必須要刪除後讓DataTable知道,所以就要用 到.AcceptChanges()方法,原因是這種刪除只是標識性刪除,就像我們通常在數據庫中用到的IsDelete字段。      

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的下面往上查找刪除,這樣即使這行符合條件被刪除了,上面的行依舊不受影響。        正確的寫法如下:  

protected void deleteDataRow(int RowID,DataTable dt) 
{   
    for (int i = dt.Rows.Count - 1; i >= 0; i--)  
    {          
        if (Convert.ToInt32(dt.Rows[i]["RowID"]) == RowID)
        dt.Rows.RemoveAt(i);       
    }   
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved