2017-10-12 75 views
0

我遇到了一個問題,即在循環中標記了幾行以刪除,但是當它到達循環中的某個點時,實際開始刪除行。DataTable.Delete()在接受更改之前刪除行

正如你可以看到我基本上做的是檢查行是否需要刪除,如果是的話,將它添加到新表中並刪除它。

問題是,這對於前60個ish行是有效的,然後所有的行突然間似乎實際上被刪除,並且它最終拋出一個包含該索引的行不存在的錯誤(在65)。

原始表格是具有70個記錄的名字,姓氏,電子郵件和公司的聯繫人列表。

我試圖削減了一半的名單,但隨後的問題開始在各地連續23

  dtSelectCompany = dt_data.Clone 
      Dim s_company As String 
      Dim b_add As Boolean 
      Dim dtCompanies As Data.DataTable 

      For i = 0 To dt_data.Rows.Count - 1 

       b_add = False 

       s_company = dt_data.Rows(i).Item(columnsDictionary("company")).ToString 

       If s_company = "" Then : b_add = True 
       Else 
        dtCompanies = crm_functions.getCompaniesByName(s_company.Replace(" ", "%")) 
        If dtCompanies.Rows.Count > 1 Then : b_add = True 
        ElseIf dtCompanies.Rows.Count = 1 Then 
         dt_data.Rows(i).Item(columnsDictionary("company")) = dtCompanies.Rows(0).Item("id") 
        Else : b_add = True 
        End If 

       End If 

       If b_add Then 
        Dim temp_row As Data.DataRow = dtSelectCompany.NewRow 
        temp_row.ItemArray = dt_data.Rows(i).ItemArray.Clone() 
        temp_row.Item("fullName") = temp_row.Item(columnsDictionary("firstname")) & " " & temp_row.Item(columnsDictionary("lastname")) 
        dtSelectCompany.Rows.Add(temp_row) 
        dt_data.Rows(i).Delete() 
       End If 

      Next 

回答

0

而非計數器的發生,用一個數據行,例如:

dtSelectCompany = dt_data.Clone 
Dim s_company As String 
Dim b_add As Boolean 
Dim dtCompanies As Data.DataTable 
Dim MyDataRow as DataRow 
For Each MyDataRow IN dt_data.Rows 
      b_add = False 

      s_company = MyDataRow("company").ToString 

      If s_company = "" Then : b_add = True 
      Else 
       ' not sure what crm_functions is, so left this alone 
       dtCompanies = crm_functions.getCompaniesByName(s_company.Replace(" ", "%")) 
       If dtCompanies.Rows.Count > 1 Then : b_add = True 
       ElseIf dtCompanies.Rows.Count = 1 Then 
        MyDataRow("company")) = dtCompanies.Rows(0).Item("id") 
       Else : b_add = True 
       End If 

      End If 

      If b_add Then 
       Dim temp_row As Data.DataRow = dtSelectCompany.NewRow 
       temp_row = MyDataRow 
       temp_row.Item("fullName") = temp_row.Item(columnsDictionary("firstname")) & " " & temp_row.Item(columnsDictionary("lastname")) 
       dtSelectCompany.Rows.Add(temp_row) 
       MyDataRow.Delete() 
      End If 
Next 

寫這從我的頭頂,所以.....

+0

嗨, 我試過這個,但仍然拋出錯誤。 –

+0

我已經解決了在上面編輯數據表之前處理的問題,而不接受更改 - 我沒有意識到在添加行之後您需要接受更改。 –