0

フィルタリングされた行を取得した後、いくつかの操作を実行するためにデータビューにいくつかの行を保持しようとしていますが、問題は、コードが実行されるたびに、最後に適用されたフィルターにデータビューが更新されることです。これがコードスニペストです。

If dsEmp.Tables.Count > 0 Then
    dvEmp = dsEmp.Tables(0).DefaultView
    dvEmp.RowFilter = "IDENTIFICATION_CODE = '" & IDENTIFICATION_CODE & "' and EMPLOYEE_DESC =  'Employment1'"
    Dim dv1 As DataView = dvEmp
    dvEmp.RowFilter = ""
    If dsEmp.Tables(0).Rows.Count > 1 Then
        dvEmp2 = New DataView
        dvEmp2 = dsEmp.Tables(0).DefaultView
        dvEmp2.RowFilter = "IDENTIFICATION_CODE = '" & IDENTIFICATION_CODE & "' and EMPLOYEE_DESC =  'Employment2'"
        Dim dv2 As DataView = dvEmp2
        dvEmp2.RowFilter = ""
    End If
    If dsEmp.Tables(0).Rows.Count > 2 Then
        dvEmpPrevious = New DataView
        dvEmpPrevious = dsEmp.Tables(0).DefaultView
        dvEmpPrevious.RowFilter = "IDENTIFICATION_CODE = '" & IDENTIFICATION_CODE & "' and EMPLOYEE_DESC =  'Employment3'"
        Dim dv3 As DataView = dvEmpPrevious
        dvEmpPrevious.RowFilter = ""
    End If
End If

しかし、2 番目のフィルターの後で dv1 の値を確認すると、異なる値が含まれています。

誰でもいくつかの解決策を提供できますか。ありがとう

4

1 に答える 1

0

変数の名前を変更しているだけですが、上記のすべての DataView はまだ同じ DataView (テーブルの DefaultView) を参照しています。したがって、RowFilter をリセットすると、この変更が DefaultView にも適用されます。

異なるフィルターで異なるビューが必要な場合は、ソース DataTable を渡す DataView を作成する必要があります。

dvEmp = new DataView(dsEmp.Tables(0))
dvEmp.RowFilter = "IDENTIFICATION_CODE = '" & IDENTIFICATION_CODE & "' and EMPLOYEE_DESC =  'Employment1'"

これで、dvEmp は DataTable の DefaultView を参照しなくなり、適用された正しい RowFilter を維持する必要があります。

もちろん、フィルター処理された DataView を使用して、DataTable ではなくフィルターの後に DataView に存在するレコードの数をテストする必要があります。
DataTable には常に同じ数のレコードが含まれます

If dvEmp.Count > 1 Then
   .....
于 2013-06-06T11:48:51.117 に答える