DataBables не объединяются VB.NET - PullRequest
0 голосов
/ 01 июня 2018

У меня есть некоторый код, предназначенный для:
1. Цикла по сетке данных, заполненной пользователем
2. Поиск в базе данных доступа с использованием критериев ввода
3. Возвращение результатов в виде данных
4. Объединить дополнительные результаты с этой таблицей
5. Привязать результаты объединенной таблицы к DataGridView

Запрос работает, результаты возвращаются, как и ожидалось, при поиске по одному значению.Запрос также вернет одно из двух тестовых значений, если я использую пользовательский ввод DataGridView.Тем не менее, он не объединит два результата перед выводом в results_DataGridView.Я также попытался использовать .Fill из адаптера, чтобы добавить его в свою временную таблицу и использовать его в качестве источника данных.


    Option Strict On

Dim dt_TempTable As New DataTable
Dim dt_ContentsTable As New DataTable
Dim SerialNumbers As New List(Of String)
Dim PanelIDs As New List(Of String)
Dim MultiSearch As Boolean

Private Sub bgwk_data_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgwk_data.DoWork

    If Not (MultiSearch) Then
        Retrieveinfo(Me.txt_SerialNumber.Text, Me.txt_PanelID.Text) 'Local
    Else
        Dim arrSN As String() = SerialNumbers.ToArray()
        Dim arrPID As String() = PanelIDs.ToArray()

        For i = 0 To arrSN.Count - 1

            If i > 0 Then

                Retrieveinfo(arrSN(i), arrPID(i)) 'Local - Run query and create a new temp table of results

                dt_ContentsTable.Merge(dt_TempTable) 'Merge new temp table to current contents table

            Else
                dt_ContentsTable = Retrieveinfo(arrSN(i), arrPID(i)) 'Return the original temp table to the contents table (datagridview datasource)
            End If
        Next
    End If

End Sub

'Gets the Data by SerialNumber and saves it to dt_TempTable to be bound afterwards
Private Function Retrieveinfo(SerialNumber As String, PanelID As String) As DataTable
    Dim ds As New datasource
    Dim tblAdapt As New datasourceTableAdapters.toHTML_SPC_DataTableAdapter

    tblAdapt.GetData(dt_TempTable, SerialNumber, PanelID)

    Return dt_TempTable 'Return the table
End Function

'Updates dg_data with the datatable from Retrieveinfo and refreshes the form
Private Sub bgwk_dataRunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgwk_data.RunWorkerCompleted
    'Unlocks ability to search new things
    Me.txt_PanelID.ReadOnly = False
    Me.txt_SerialNumber.ReadOnly = False
    Me.dg_data.ReadOnly = False

    'Binds the backgroundworker results to the datagridview
    Me.dg_data.DataSource = Nothing
    Me.dg_data.DataSource = dt_ContentsTable

    Me.dg_data.Refresh()
    Me.Refresh()
End Sub

Я понимаю, что слияние может использоваться в DataTables, но, возможно, это неправильное использование?

1 Ответ

0 голосов
/ 02 июня 2018

Я бы пошел с условием в цикле мульти-поиска:

If dt_ContentsTable.Rows.Count = 0 Then
    dt_ContentsTable = dt_TempTable.Clone()
End If
dt_ContentsTable.Merge(dt_TempTable)

Таким образом, в первый раз, по крайней мере, создаются столбцы dt_ContentsTable.

Iтакже не вижу никакого кода в единственном поиске, где назначен dt_ContentsTable.Поэтому в одиночном поиске я рекомендую назначить dt_ContentsTable для dt_TempTable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...