Отображение анимации загрузки при загрузке dgv - PullRequest
1 голос
/ 05 августа 2020

Обновленный код. Я думаю, что это близко, но dgv не загружается никакими данными.

Publi c Class CloseJob Publi c sqlcon As String = My.Settings.New_Assembly_AccessConnectionString Publi c con As New SqlConnection (sqlcon ) Publi c job As String

Public Async Function GetDataAsync(ByVal sql As String, ByVal sqlcon As String) As Task(Of DataTable)
    Dim dt As New DataTable
    Dim cmd As New SqlCommand(sql, con)
    Using da = New SqlDataAdapter(sql, sqlcon)
        da.SelectCommand = cmd
        cmd.Parameters.AddWithValue("@Job2", job)

        Await Task.Run(Function()
                           da.Fill(dt)
                       End Function)
    End Using

    Return dt
End Function


Public Async Sub Button_Click(sender As Object, e As RoutedEventArgs)
    Refresh.Visibility = Windows.Visibility.Visible
    txtJob.IsEnabled = False
    btnEnter.IsEnabled = False

    Try
        job = txtJob.Text
        Dim sqlcon As String = My.Settings.New_Assembly_AccessConnectionString
        Dim sql As String
       
        sql = "SELECT isnull(p.[CLASS],j.class) as 'CLASS',isnull([SERIAL_NUMBER],left(year(d.cup_mfg_date),2) + d.cup_serial) as SERIAL, " & _
                              "isnull([CUP_DATE],d.cup_mfg_date) as CUPDATE, isnull([CUP_PART_NUM],left([Cup#],charindex('-',Cup#)-1)) as PARTNUM, isnull(p.[LATERAL_VALUE], " & _
                               "d.lateral_value * 10000) as LATVALUE, isnull([LAT_UPPER],0) as LAT_UPPER,isnull([LAT_LOWER],0) as LAT_LOWER, " & _
                               "isnull(p.[BEFORE_WEIGHT],0) as BEFORE_WEIGHT, isnull(p.[AFTER_WEIGHT],0) as AFTER_WEIGHT,isnull([GREASE_UPPER],0) as GREASE_UPPER, " & _
                               "isnull([GREASE_LOWER],0) as GREASE_LOWER,isnull(p.[SPACER_MEASURE], d.Spacer_Measure) as SPACER,isnull([QTY_SPACER_CHANGE],0) as 'CHANGES', " & _
                               "isnull([LATERAL_DATE_TIME],'1999-11-11 11:11:11.111') as LATERAL_DATE_TIME, " & _
                               "isnull([GREASE_DATE_TIME],'1999-11-11 11:11:11.111') as GREASE_DATE_TIME, isnull([LINE_NUM],d.linenum) as LINE, " & _
                               "isnull(BAD_PART, 'BAD_INFO') as Result, isnull([AIR_PRESSURE1], 0) as PRESSURE " & _
                               "FROM [NB_ASSEMBLY].[dbo].[PieceData] p full outer JOIN New_Assembly_Access.dbo.Tbl_Data AS d " & _
                               "ON substring(d.zbarcode,3,6) = right(p.serial_number,6) and month(d.cup_mfg_date) = month(p.cup_date) and " & _
                               "right(d.zbarcode,10) = right(p.cup_part_num,10) join new_assembly_Access.dbo.tbl_job j on j.job# = d.job# where d.job# = @Job2"

        con.Open()
        Dim data = Await GetDataAsync(sql, sqlcon)

        dgvJob.DataContext = data
        dgvJob.AutoGenerateColumns = True
        dgvJob.CanUserAddRows = False

    Catch ex As Exception

    End Try
    Refresh.Visibility = Windows.Visibility.Hidden

End Sub

Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
    Refresh.Visibility = Windows.Visibility.Hidden
    txtJob.Focus()

End Sub

End Class

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Я рекомендую вам немного очистить свой код и создать методы, которые делают только одно - не иметь ReadDatabase, которая также возится с элементами управления, et c

DataAdapter может принимать строку sql и строку подключения, он знает, как установить соединение и открыть его et c. Он приводит все в порядок, чтобы передать все это DA

И, возможно, поместить эту массивную строку SQL в файл ресурсов

Private Async Function GetComponentsDataTable() as Task(Of DataTable)

    Dim con As String = My.Settings.New_Assembly_AccessConnectionString
    Dim sql as String = "SELECT isnull(p.[CLASS],j.class) as 'CLASS',isnull([SERIAL_NUMBER],left(year(d.cup_mfg_date),2) + d.cup_serial) as SERIAL, " & _
                                      "isnull([CUP_DATE],d.cup_mfg_date) as CUPDATE, isnull([CUP_PART_NUM],left([Cup#],charindex('-',Cup#)-1)) as PARTNUM, isnull(p.[LATERAL_VALUE], " & _
                                      "d.lateral_value * 10000) as LATVALUE, isnull([LAT_UPPER],0) as LAT_UPPER,isnull([LAT_LOWER],0) as LAT_LOWER, " & _
                                      "isnull(p.[BEFORE_WEIGHT],0) as BEFORE_WEIGHT, isnull(p.[AFTER_WEIGHT],0) as AFTER_WEIGHT,isnull([GREASE_UPPER],0) as GREASE_UPPER, " & _
                                      "isnull([GREASE_LOWER],0) as GREASE_LOWER,isnull(p.[SPACER_MEASURE], d.Spacer_Measure) as SPACER,isnull([QTY_SPACER_CHANGE],0) as 'CHANGES', " & _
                                      "isnull([LATERAL_DATE_TIME],'1999-11-11 11:11:11.111') as LATERAL_DATE_TIME, " & _
                                      "isnull([GREASE_DATE_TIME],'1999-11-11 11:11:11.111') as GREASE_DATE_TIME, isnull([LINE_NUM],d.linenum) as LINE, " & _
                                      "isnull(BAD_PART, 'BAD_INFO') as Result, isnull([AIR_PRESSURE1], 0) as PRESSURE " & _
                                      "FROM [NB_ASSEMBLY].[dbo].[PieceData] p full outer JOIN New_Assembly_Access.dbo.Tbl_Data AS d " & _
                                      "ON substring(d.zbarcode,3,6) = right(p.serial_number,6) and month(d.cup_mfg_date) = month(p.cup_date) and " & _
                                      "right(d.zbarcode,10) = right(p.cup_part_num,10) join new_assembly_Access.dbo.tbl_job j on j.job# = d.job# where d.job# = @Job2"

    Using da as New SqlDataAdapter(sql, con)

        da.SelectCommand.Parameters.AddWithValue("@Job2", job) 'see https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/'
        Dim dt As New DataTable
        Await Task.Run(Sub() da.Fill(dt))           'also, see note from AlexB
        Return dt
    End Using

End Sub

Public Async Sub Button_Click(sender As Object, e As RoutedEventArgs)

    txtJob.IsEnabled = False
    btnEnter.IsEnabled = False


    Dim dt = Await GetComponentsDataTable()

    dgvJob.AutoGenerateColumns = True
    dgvJob.DataContext = dt.DefaultView
    dgvJob.CanUserAddRows = False

End Sub

Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
    txtJob.Focus()

End Sub
0 голосов
/ 05 августа 2020

Это ваш код, изменяемый на лету, начните отсюда, так как я не знаю, хорошо ли работает или нужны изменения без вашей базы данных и других параметров.

Public con As New SqlConnection
Public job As String

Private Sub ReadDatabase()

    Dim bgThread As Threading.Thread = New Threading.Thread(Sub()

                                                                Dim sqlcon As String = My.Settings.New_Assembly_AccessConnectionString
                                                                Dim sql As New SqlCommand
                                                                Dim da As New SqlDataAdapter
                                                                Dim ds As New DataSet

                                                                Using con = New SqlConnection(sqlcon)
                                                                    con.Open()

                                                                    sql = New SqlCommand("SELECT isnull(p.[CLASS],j.class) as 'CLASS',isnull([SERIAL_NUMBER],left(year(d.cup_mfg_date),2) + d.cup_serial) as SERIAL, " &
                                                                                              "isnull([CUP_DATE],d.cup_mfg_date) as CUPDATE, isnull([CUP_PART_NUM],left([Cup#],charindex('-',Cup#)-1)) as PARTNUM, isnull(p.[LATERAL_VALUE], " &
                                                                                              "d.lateral_value * 10000) as LATVALUE, isnull([LAT_UPPER],0) as LAT_UPPER,isnull([LAT_LOWER],0) as LAT_LOWER, " &
                                                                                              "isnull(p.[BEFORE_WEIGHT],0) as BEFORE_WEIGHT, isnull(p.[AFTER_WEIGHT],0) as AFTER_WEIGHT,isnull([GREASE_UPPER],0) as GREASE_UPPER, " &
                                                                                              "isnull([GREASE_LOWER],0) as GREASE_LOWER,isnull(p.[SPACER_MEASURE], d.Spacer_Measure) as SPACER,isnull([QTY_SPACER_CHANGE],0) as 'CHANGES', " &
                                                                                              "isnull([LATERAL_DATE_TIME],'1999-11-11 11:11:11.111') as LATERAL_DATE_TIME, " &
                                                                                              "isnull([GREASE_DATE_TIME],'1999-11-11 11:11:11.111') as GREASE_DATE_TIME, isnull([LINE_NUM],d.linenum) as LINE, " &
                                                                                              "isnull(BAD_PART, 'BAD_INFO') as Result, isnull([AIR_PRESSURE1], 0) as PRESSURE " &
                                                                                              "FROM [NB_ASSEMBLY].[dbo].[PieceData] p full outer JOIN New_Assembly_Access.dbo.Tbl_Data AS d " &
                                                                                              "ON substring(d.zbarcode,3,6) = right(p.serial_number,6) and month(d.cup_mfg_date) = month(p.cup_date) and " &
                                                                                              "right(d.zbarcode,10) = right(p.cup_part_num,10) join new_assembly_Access.dbo.tbl_job j on j.job# = d.job# where d.job# = @Job2", con)


                                                                    sql.Parameters.AddWithValue("@Job2", job)
                                                                    da.SelectCommand = sql

                                                                    Dim dt As New DataTable
                                                                    da.Fill(dt)
                                                                    Invoke(Sub()
                                                                               dgvJob.DataContext = dt.DefaultView
                                                                               dgvJob.AutoGenerateColumns = True
                                                                               dgvJob.CanUserAddRows = False
                                                                           End Sub)


                                                                End Using


                                                            End Sub) With {
        .IsBackground = True
                                        }
    bgThread.Start()

End Sub

Public Sub Button_Click(sender As Object, e As RoutedEventArgs)

    txtJob.IsEnabled = False
    btnEnter.IsEnabled = False
    job = txtJob.Text

    ReadDatabase()

End Sub

Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
    txtJob.Focus()
End Sub
...