Vb.net DataView将自身更新为新的行筛选器

Vb.net DataView将自身更新为新的行筛选器,vb.net,c#-4.0,datatable,dataview,Vb.net,C# 4.0,Datatable,Dataview,我试图在dataview中保留一些行,以便在获取筛选行后执行某些操作,但问题是,每次代码运行时,dataview都会更新为上次应用的筛选器。这是snippest的代码 If dsEmp.Tables.Count > 0 Then dvEmp = dsEmp.Tables(0).DefaultView dvEmp.RowFilter = "IDENTIFICATION_CODE = '" & IDENTIFICATION_CODE & "' and EMPLO

我试图在dataview中保留一些行,以便在获取筛选行后执行某些操作,但问题是,每次代码运行时,dataview都会更新为上次应用的筛选器。这是snippest的代码

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的值时,在第二个过滤器之后,它有不同的值

谁能给出一些解决办法。
谢谢,您只是更改了变量的名称,但是上面的每个数据视图仍然引用相同的数据视图(表的DefaultView)。因此,当您重置行过滤器时,您也会将此更改应用于DefaultView

如果您想使用不同的过滤器拥有不同的视图,那么您需要创建一个传递源数据表的数据视图

dvEmp = new DataView(dsEmp.Tables(0))
dvEmp.RowFilter = "IDENTIFICATION_CODE = '" & IDENTIFICATION_CODE & "' and EMPLOYEE_DESC =  'Employment1'"
现在dvEmp不再引用DataTable的DefaultView,它应该保持正确的RowFilter

当然,您应该使用筛选数据视图来测试筛选后数据视图中的记录数,而不是数据表中的记录数。
DataTable将始终包含相同数量的记录

If dvEmp.Count > 1 Then
   .....

感谢史蒂夫的回复和编辑:)。。。然而,我刚刚得到了解决方案,那就是将我筛选的每一行保存到一个数据表中,并使用该数据表而不是该数据行。我知道它没有优化,但它工作正常;)