【问题标题】:Removing rows from datatable + AcceptChanges从数据表中删除行 + AcceptChanges
【发布时间】:2009-10-14 14:06:01
【问题描述】:

我的 ASP.NET 应用程序中有 2 个数据表。我循环遍历它们,如果找到匹配项,我会从外部数据表中删除该特定行,如下所示:

For i As Integer = 0 To dtFixedActs.Count - 1
        For j As Integer = 0 To dtTotals.Count - 1                
            If dtFixedActs.Rows(i).Item("Activity") = dtTotals.Rows(j).Item("Activity") Then
                dtFixedActs.Rows(i).Delete()
                i += 1
                j += 1
            End If
        Next            
        dtFixedActs.AcceptChanges()
    Next

这工作正常,除非 dtFixedActs 仅包含 1 行并且在其他数据表中找到匹配项。我收到“位置 1 没有行”错误。这是有道理的,因为 i+=1 我想进入下一行,在这种情况下这是不可能的。

我试图在 dtFixedActs.AcceptChanges 命令进出第一个循环,但无济于事。我还注释掉了 i+=1 行,但随后我得到“无法通过行访问已删除的行信息”。错误。

我不知道如何解决这个问题。当 dtFixedActs 包含多于 1 行时,不会出现问题。

有什么建议吗?

【问题讨论】:

    标签: asp.net datatable


    【解决方案1】:

    最奇怪的是,我似乎已经解决了这个问题。我添加了一个 try catch 异常代码块,如下所示:

    For i As Integer = 0 To dtFixedActs.Count - 1
            For j As Integer = 0 To dtTotals.Count - 1                
                Try
                    If dtFixedActs.Rows(i).Item("Activity") = dtTotals.Rows(j).Item("Activity") Then
                        dtFixedActs.Rows(i).Delete()
                        i += 1
                        j += 1
                    End If
                Catch ex As Exception
    
                End Try
    
            Next
            dtFixedActs.AcceptChanges()
        Next
    

    现在似乎一切正常。 有没有人对此有解释,因为我怀疑这是一个有效的解决方案?

    【讨论】:

      【解决方案2】:

      如果找到匹配项 dfFixedActs(dtFixedActs.Count - 1),您将遇到问题,因为我增加到外侧边界。 只是添加了一个条件来防止 i 或 j 移出边界,例如 i

      【讨论】:

      • 谢谢亨利,我已经尝试过了,但后来我得到“无法通过行访问已删除的行信息。”错误。
      • 您需要再次测试它,然后再进行第二次测试。可能是另一个变量 x 来跟踪您删除了多少行。你我不能循环到 dtFixedActs.Count - 1,你可以循环到 dtFixedActs.Count - 1 - x。
      • 你尝试 catch 会起作用,但你应该处理异常。另一点是你不应该为明显的已知异常打开代码
      【解决方案3】:

      寻找应用程序中的缓慢性能我发现 try/catch 是您可以执行的最昂贵的操作之一。在我的测试中,前一段时间,它需要 250 毫秒。从那以后,我再也没有使用 try catch,除非作为防止我从未想过的错误的最后一道防线。即使这样,我也会安排记录错误,以便可以直接识别和处理特定错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        相关资源
        最近更新 更多