首页 > 解决方案 > 使用带有一个数据表的分离数据视图来填充两个组合框

问题描述

我有一个数据表和两个数据视图,我想使用每个数据视图来填充一个组合框作为下一个代码:

        Dim xDv_Parents As DataView = MyVar_Dt_AllAccounts.DefaultView
        xDv_Parents.RowFilter = "AccType='Main'"
        Call xCLS.MyCodes_CboFill_Dv(Me.CboAccParent, "AccName", "AccID", xDv_Parents)

        Dim xDv_Final As DataView = MyVar_Dt_AllAccounts.DefaultView
        xDv_Final.RowFilter = "AccType='Final'"
        Call xCLS.MyCodes_CboFill_Dv(Me.CboAccFinal, "AccName", "AccID", xDv_Final)

但是当我调试应用程序时,它会根据最后一个名为 (xDv_Final) 的 Dataview 在两个组合框中为我提供相同的内容。

我尝试将一个 Dataview 与不同的行过滤器一起使用,但没有成功。请问这里到底有什么问题!?

标签: vb.netdatatabledataview

解决方案


这是因为您为两个组合框重用了相同的视图。您所做的只是在内存中建立指向同一个对象的新变量。首先你有这个:

在此处输入图像描述

然后你创建了另一个变量,同一个对象:

    Dim xDv_Parents As DataView = MyVar_Dt_AllAccounts.DefaultView

在此处输入图像描述

然后你设置一个rowfilter:

    xDv_Parents.RowFilter = "AccType='Main'"

在此处输入图像描述

然后你告诉一个组合使用它,所以现在你也有一个指向它的组合:

    Call xCLS.MyCodes_CboFill_Dv(Me.CboAccParent, "AccName", "AccID", xDv_Parents)

在此处输入图像描述

然后你创建了另一个变量,也指向它,并覆盖了你刚刚设置的行过滤器:

    Dim xDv_Final As DataView = MyVar_Dt_AllAccounts.DefaultView
    xDv_Final.RowFilter = "AccType='Final'"

在此处输入图像描述

最后,您将另一个组合附加到同一视图:

    Call xCLS.MyCodes_CboFill_Dv(Me.CboAccFinal, "AccName", "AccID", xDv_Final)

在此处输入图像描述

这就是 .net 编程语言中变量的工作方式。除非您使用,否则您New只是将新变量附加到现有对象实例

你应该做的是:

    Dim xDv_Parents = new DataView(MyVar_Dt_AllAccounts)
    xDv_Parents.RowFilter = "AccType='Main'"
    xCLS.MyCodes_CboFill_Dv(Me.CboAccParent, "AccName", "AccID", xDv_Parents)

    Dim xDv_Final = New DataView(MyVar_Dt_AllAccounts.DefaultView)
    xDv_Final.RowFilter = "AccType='Final'"
    xCLS.MyCodes_CboFill_Dv(Me.CboAccFinal, "AccName", "AccID", xDv_Final)

推荐阅读