Member 13849164 Ответов: 1

Как я показываю индикатор выполнения/экран загрузки при извлечении строк datagrid из базы данных в VB.NET и оракул


Привет! все,я просто новичок в Visual Basic.Хранимая процедура Net и Oracle.

**Вот мой код вызова строк в базе данных**

Public Function RESA_Checker(ByVal stores As String, ByVal bus_date As String, ByVal warehouse As String)
        dt = New DataTable
        bg.GetProcDataTable(connStr, "SALES_CHECKER.procedure_checker")
        cmd.Parameters.Add(New OracleParameter("stores", OracleDbType.Varchar2)).Value = stores
        cmd.Parameters.Add(New OracleParameter("bus_date", OracleDbType.Varchar2)).Value = bus_date
        cmd.Parameters.Add(New OracleParameter("warehouse", OracleDbType.Varchar2)).Value = warehouse
        cmd.Parameters.Add(New OracleParameter("O_OUTPUT", OracleDbType.RefCursor)).Direction = ParameterDirection.Output
        adap_or.SelectCommand = cmd
        adap_or.Fill(dt)


        Return dt
        ora_conn.Close()
    End Function

Моя цель состоит в том, чтобы пользователь был проинформирован через диалоговое окно с индикатором выполнения или анимированным gif, что форма загружается и все еще извлекает записи из базы данных, говорит "Пожалуйста, подождите"/"поиск" и предотвращает путаницу для пользователя, думающего, что форма разбилась.

P. s. было бы полезно, если бы вы дали ссылки на видеоуроки.
Я очень надеюсь , что вы сможете мне помочь, Спасибо.


Что я уже пробовал:

У меня есть этот набор кодов, который я нашел в интернете. Это работает, но как я могу преобразовать этот импортирующий CSV-файл из выборки строк из базы данных с помощью хранимой процедуры Oracle.

Dim strRow As String()              'String array to read all fields in a row
    Dim dblAmount As Double             'Variable for total amount 
    Dim blnReported As Boolean = True   'Flag to check progress report completed or not

    'Create TextFieldParser class to parse the stock.csv file in the current location
    Dim txtFile As FileIO.TextFieldParser

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Allow background operation to be cancelled
        bgWorker.WorkerSupportsCancellation = True

        'Allow background operation to report progress
        bgWorker.WorkerReportsProgress = True

        'Disable Stop Button. It is enabled only after start
        'button is pressed
        btnStop.Enabled = False

        'set status message
        lblStatus.Text = "Press Start to import data from csv."

        'Add columns to the grid
        dgvCSVData.Columns.Add("colNo", "No")
        dgvCSVData.Columns("colNo").Width = 30
        dgvCSVData.Columns.Add("colDate", "Date")
        dgvCSVData.Columns("colDate").Width = 60
        dgvCSVData.Columns.Add("colItem", "Item")
        dgvCSVData.Columns("colItem").Width = 120
        dgvCSVData.Columns.Add("colQty", "Quantity")
        dgvCSVData.Columns("colQty").Width = 50
        dgvCSVData.Columns.Add("colUnit", "Unit")
        dgvCSVData.Columns("colUnit").Width = 30
        dgvCSVData.Columns.Add("colAmt", "Amt")
        dgvCSVData.Columns("colAmt").Width = 60
    End Sub

    Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
        'Disable Start button and Enable Stop
        btnStart.Enabled = False
        btnStop.Enabled = True

        'set status message
        lblStatus.Text = "Importing data from CSV file."

        'Start time-consuming operation in background
        Call bgWorker.RunWorkerAsync()
    End Sub

    Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
        'Enable Start button and disable Stop
        btnStart.Enabled = True
        btnStop.Enabled = False

        'Stop background operation
        bgWorker.CancelAsync()

        'set status message
        lblStatus.Text = "Import cancelled. Press Start again."
    End Sub

    Private Sub bgWorker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker.DoWork
        Dim intCount As Int16 = 0
        txtFile = New FileIO.TextFieldParser("stock.csv")
        'Specify structure of the file
        txtFile.TextFieldType = FileIO.FieldType.Delimited
        txtFile.SetDelimiters(",")

        'Skip header row
        txtFile.ReadFields()

        'Start reading data from file
        While Not txtFile.EndOfData

            If bgWorker.CancellationPending Then
                e.Cancel = True
                Exit Sub

            Else

                'Wait for Progress Report to finish
                While Not blnReported
                    Application.DoEvents()
                End While

                'Read all field in a row into a string array
                strRow = txtFile.ReadFields()

                'Do some calculations and assign value to data grid
                dblAmount = CDbl(strRow(3)) * CDbl(strRow(4))

                'Add some sleep to simulate a long running operation
                System.Threading.Thread.Sleep(500)

                'Progress report pending
                blnReported = False

                'increment counter
                intCount += 1

                'Report the progress
                bgWorker.ReportProgress(10, intCount)

            End If

        End While
    End Sub

    Private Sub bgWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bgWorker.ProgressChanged
        'Copy values to data grid
        dgvCSVData.Rows.Add(strRow)
        dgvCSVData.Rows(dgvCSVData.CurrentRow.Index - 1).Cells("colAmt").Value = dblAmount

        pgbCopyProgress.Value = e.UserState
        'Progress report finished
        blnReported = True
    End Sub

    Private Sub bgWorker_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgWorker.RunWorkerCompleted
        If e.Cancelled Or Not IsNothing(e.Error) Then
            'Clear the data grid
            dgvCSVData.Rows.Clear()
        Else
            'Progress completed
            pgbCopyProgress.Value = 100

            'Release txtfile
            txtFile.Dispose()
            btnStop.Enabled = False
            btnStart.Enabled = True

        End If
    End Sub

1 Ответов

Рейтинг:
1

Manoj S Pant

Вы можете использовать панель управления прогрессом над формой, чтобы показать прогресс состояния на экране
например, 10%, 40% и 100%.

У нас есть контроль над прогресс-баром VB.net, перетащите этот элемент управления на экран.

ProgressBar1.Value = 10
--- Perform some task.

ProgressBar1.Value = 40
--- Perform some task.

ProgressBar1.Value = ProgressBar1.Maximum; // means task completed


ProgressBar1.Value = 0




Теперь если вы вызываете некоторые функции таким образом вы можете передать ссылку на этот Progressbar
контроль над функциями и управление статусом индикатора выполнения также осуществляется из функций.

Public  Function SyncToOracle(ByRef p_objProgressBar As ProgressBar)

p_objProgressBar.Value = 10

ProgressBar1.Value = 40
--- Perform some task.

ProgressBar1.Value = ProgressBar1.Maximum // means task completed


ProgressBar1.Value = 0

End Function




--Вы вызываете функцию и передаете объект управления индикатором выполнения над функцией
SyncToOracle(ProgressBar1)