Использование разделенных Dataviews с одним Datatable для заполнения двух combobox - PullRequest
2 голосов
/ 11 июля 2020
• 1000 Comboboxs в соответствии с последним Dataview с именем (xDv_Final).

Я пытался использовать один Dataview с другим фильтром строк, но безуспешно. в чем именно проблема, пожалуйста!?

Ответы [ 2 ]

2 голосов
/ 11 июля 2020

Это потому, что вы повторно использовали одно и то же представление для обоих комбинированных списков. Все, что вы сделали, это установили sh новых переменных, указывающих на один и тот же объект в памяти. Сначала у вас было это:

enter image description here

Then you made another variable, same object:

    Dim xDv_Parents As DataView = MyVar_Dt_AllAccounts.DefaultView

enter image description here

Then you set a rowfilter:

    xDv_Parents.RowFilter = "AccType='Main'"

enter image description here

Then you told one combo to use it, so now you have a combo pointing to it too:

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

enter image description here

Then you made another variable, also pointing to it, and overwrote the rowfilter you just set:

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

enter image description here

Finally you attached another combo to the same view:

    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)
1 голос
/ 11 июля 2020

Я нашел решение, но если у кого-то есть другое решение, поделитесь им с нами, я использовал ".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)

может кто-нибудь прокомментировать, какое решение лучше и в чем разница?

...