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

但是当我检查 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 来测试过滤后 DataView 中存在的记录数,而不是 DataTable。
DataTable 将始终包含相同数量的记录

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