首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sepirated和一个Datatable填充两个组合框

使用sepirated和一个Datatable填充两个组合框
EN

Stack Overflow用户
提问于 2020-07-11 08:30:22
回答 2查看 48关注 0票数 2

我有一个Datatable和两个Dataview,我想用每个Dataview填充一个组合框作为下一步代码:

代码语言:javascript
复制
        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与不同的行过滤器结合使用,但没有成功。请问到底是什么问题!?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-11 17:43:03

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

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

代码语言:javascript
复制
    Dim xDv_Parents As DataView = MyVar_Dt_AllAccounts.DefaultView

然后设置一个行过滤器:

代码语言:javascript
复制
    xDv_Parents.RowFilter = "AccType='Main'"

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

代码语言:javascript
复制
    Call xCLS.MyCodes_CboFill_Dv(Me.CboAccParent, "AccName", "AccID", xDv_Parents)

然后,您创建了另一个变量,也指向它,并覆盖了刚刚设置的rowfilter:

代码语言:javascript
复制
    Dim xDv_Final As DataView = MyVar_Dt_AllAccounts.DefaultView
    xDv_Final.RowFilter = "AccType='Final'"

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

代码语言:javascript
复制
    Call xCLS.MyCodes_CboFill_Dv(Me.CboAccFinal, "AccName", "AccID", xDv_Final)

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

你应该做的是:

代码语言:javascript
复制
    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)
票数 2
EN

Stack Overflow用户

发布于 2020-07-11 09:22:46

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

代码语言:javascript
复制
    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)

我使用了下面的代码:

代码语言:javascript
复制
 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)

有没有人能就哪种解决方案更好,有什么区别给我们提点意见?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62843959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档