我有一个Datatable和两个Dataview,我想用每个Dataview填充一个组合框作为下一步代码:
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与不同的行过滤器结合使用,但没有成功。请问到底是什么问题!?
发布于 2020-07-11 17:43:03
这是因为您在两个组合框中重用了相同的视图。您所做的只是在内存中建立指向同一对象的新变量。首先,你有这样的想法:

然后你创建了另一个变量,同样的对象:
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)发布于 2020-07-11 09:22:46
我找到了一个解决方案,但是如果有人有其他的解决方案,请与我们分享,我最后在数据视图中使用了".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)有没有人能就哪种解决方案更好,有什么区别给我们提点意见?
https://stackoverflow.com/questions/62843959
复制相似问题