2017-05-13 3 views
0

私はこれに多くの時間を費やし、どこにもいない。私は2つのDGVを持っていて、同じ値の2つの列を比較しようとしています.DGV2の値がDGV1にない場合、その値はDGV3に移動します。ここの問題は論理的ですが、この間違った解決策で主演しすぎると、私はそれ以上は動かすことができなくなりました。2つのDGVで重複を見つける

DGV1全体がIFより前にDGV2の最初の値で検索され、DGV2の他のすべての値ですべて検索されるはずです。本当にここで助けが必要なのか分かりません。

ありがとうございました。

Dim row As String() = New String() {"", "", "", ""} 
    Dim x As Integer = 0 
    For A = 0 To DGV2.RowCount - 1 
     For B = 0 To DGV1.RowCount - 1 
      If GetTextOrEmpty(DGV1.Rows(A).Cells(4).Value) = GetTextOrEmpty(DGV2.Rows(B).Cells(1).Value) Then 
      Else 
       'PROBLEM : This is going to add row WITH SAME VALUES everytime it's <> 
       DGV3.Rows.Add(row) 
       DGV3.Rows(x).Cells(0).Value = DGV2.Rows(B).Cells(0).Value 
       DGV3.Rows(x).Cells(1).Value = DGV2.Rows(B).Cells(2).Value 
       DGV3.Rows(x).Cells(2).Value = DGV2.Rows(B).Cells(1).Value 
       DGV3.Rows(x).Cells(3).Value = DGV2.Rows(B).Cells(3).Value 
       x = x + 1 
      End If 
     Next 
    Next 

EDIT:Nevermind。

Dim row As String() = New String() {"", "", "", ""} 

    Dim x As Integer = 0 
    For A = DGV2.RowCount - 1 To 0 Step -1 
     For B = 0 To DGV1.RowCount - 1 
      If GetTextOrEmpty(DGV1.Rows(B).Cells(4).Value) = GetTextOrEmpty(DGV2.Rows(A).Cells(1).Value) Then 
       DGV2.Rows.Remove(DGV2.Rows(A)) 
      End If 
     Next 
    Next 

    For i = 0 To DGV2.RowCount - 1 
     DGV3.Rows.Add(row) 
     DGV3.Rows(x).Cells(0).Value = DGV2.Rows(i).Cells(0).Value 
     DGV3.Rows(x).Cells(1).Value = DGV2.Rows(i).Cells(2).Value 
     DGV3.Rows(x).Cells(2).Value = DGV2.Rows(i).Cells(1).Value 
     DGV3.Rows(x).Cells(3).Value = DGV2.Rows(i).Cells(3).Value 
     x = x + 1 
    Next 
+0

ではなく、各セルに突っつい、あなたがデータソースとしてのDataTableを使用する場合は、より迅速でdupesのためにそれらを照会することができ、これに解決される問題linqの数行 – Plutonix

答えて

1

少し速くHashSetと::

Dim values = New HashSet(Of String)(From i In Enumerable.Range(0, DGV1.RowCount) 
            Select Convert.ToString(DGV1(4, i).Value)) 

For Each r As DataGridViewRow In DGV2.Rows 
    If Not values.Contains(Convert.ToString(r.Cells(0).Value)) Then 
     DGV3.Rows.Add(r.Cells(0).Value, r.Cells(1).Value, r.Cells(2).Value, r.Cells(3).Value) 
    End If 
Next 
関連する問題