使用带有一个数据表的分离数据视图来填充两个组合框

Using sepirated Dataviews with one Datatable for filling two combobox

我有一个 Datatable 和两个 Dataview,我想使用每个 Dataview 填充一个 Combobox 作为下一个代码:

        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 与不同的行过滤器一起使用,但没有成功。 请问这里到底有什么问题!?

我找到了解决方案,但如果有人有其他解决方案请与我们分享,我在数据视图的最后使用了“.ToTable”。

    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.ToTable)

    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.ToTable)

我使用了下一个代码:

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

xdv.RowFilter = "AccType='Final'"
Call xCLS.MyCodes_CboFill_Dv(Me.CboAccFinal, "AccName", "AccID", xdv.ToTable)

任何人都可以给我们任何关于哪种解决方案更好以及有什么区别的评论吗?

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

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

    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)

然后你又做了一个变量,也指向它,并覆盖了你刚刚设置的rowfilter:

    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)