Загружаю ли я данные дважды и обновляю элемент строки с логическим значением - PullRequest
0 голосов
/ 14 мая 2018

Я вызываю следующую функцию в модуле

Открытая функция GetExcelData (ByVal ExcelFile As String) как System.Data.DataTable

Тогда у меня есть следующий код

            If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            gblCompName = openFileDialog1.FileName
        End If

        Dim reader As New DataTableReader(GetExcelData(gblCompName))
        Dim table As New DataTable

        table.Load(reader)
        table.Columns.Add("Single", GetType(Boolean), False)
        table.Columns.Add("CouplesInFinal", GetType(Int32))
        table.Columns.Add("EvtNum", GetType(String))
        table.Columns.Add("EvtStruct", GetType(Int32))
        table.Columns.Add("EvtCplID", GetType(Int32))
        table.Columns.Add("CouplesInClass", GetType(Int32))
        table.Columns.Add("Valid", GetType(Boolean), True)

        Dim result() As DataRow = table.Select("[class]" Like "Single")
        For Each row In result
            If row.Item("Class") Like "Single" Then
                table.Rows(0)("Single") = True
            End If
        Next

        DataGridView1.DataSource = table

Моя логика говорит мне, что я загружаю таблицу дважды, и поле строки данных "Single" является логическим значением, которое я пытаюсь обновить до True, если строковое поле "class" похоже на "Single"

Я понимаю, что это 2 вопроса в одном, но, кажется, загружается довольно медленно, и это все одна процедура формы.Любой совет по этому поводу будет очень кстати, спасибо

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Метод обновления таблицы, который я получил для работы:

                Dim i As Integer = 0
            For i = 0 To table.Rows.Count - 1
                If table.Rows(i)("Class") Like "*Single*" Then
                    table.Rows(i)("Single") = True
                End If
            Next

Я убрал «, False» в этой строке таблицы. Columns.Add («Single», GetType (Boolean)

0 голосов
/ 14 мая 2018
Dim reader As New DataTableReader(GetExcelData(gblCompName))
Dim table As New DataTable

Не видя GetExcelData, трудно сказать, заполняете ли вы дважды. Если эта функция возвращает заполненную таблицу данных, то

Dim table as DataTable = GetExcelData(gblCompName)

и удалите таблицу. Загрузка и DataReader. Вот моя версия обновления DataTable для моей базы данных.

Private Sub TestDataTableUpdate()
        Try
            Using cmd As New SqlCommand("Select * From Coffees", CoffeeCn)
                Dim dt As New DataTable
                CoffeeCn.Open()
                Using dr As SqlDataReader = cmd.ExecuteReader
                    dt.Load(dr)
                End Using
                CoffeeCn.Close()
                For index As Integer = 0 To dt.Rows.Count - 1
                    If dt.Rows(index)("Name").ToString = "Cinnamon Stick" Then
                        dt.Rows(index)("Roast") = "N/A"
                    End If
                Next
                'The above does not update the database
                Dim da As New SqlDataAdapter(cmd) 'provides the connection and Select command
                Dim sqlCB As New SqlCommandBuilder(da) 'Associates the DataAdapter to the command builder
                sqlCB.GetUpdateCommand() 'Retrieve the update command for the DataAdapter
                'Note: the DataAdapter opens and closes the connection for you
                da.Update(dt) 'This updates the database by finding the changed rows in the datatable
                'and running the Update command
                dt.AcceptChanges() 'Reset the row status to unchanged
                DataGridView1.DataSource = dt
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            CoffeeCn.Close()
        End Try
    End Sub

PS. Я тоже самоучка.

...