当数据网格在VB.NET和oracle中从数据库中获取行时,如何显示进度条/加载屏幕 [英] How do I shown progress bar/loading screen while datagrid fetching rows from database in VB.NET and oracle

查看:127
本文介绍了当数据网格在VB.NET和oracle中从数据库中获取行时,如何显示进度条/加载屏幕的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨!大家好,我只是Visual Basic.Net和Oracle存储过程的新手。



**这是调用数据库中行的代码* *



公共功能RESA_Checker(ByVal存储As String,ByVal bus_date As String,ByVal仓库为字符串)
dt = New DataTable
bg.GetProcDataTable(connStr,SALES_CHECKER.procedure_checker)
cmd.Parameters.Add(New OracleParameter(stores,OracleDbType.Varchar2))。Value =存储
cmd.Parameters。添加(New OracleParameter(bus_date,OracleDbType.Varchar2))。Value = bus_date
cmd.Parameters.Add(New OracleParameter(warehouse,OracleDbType.Varchar2))。Value =仓库
cmd。 Parameters.Add(New OracleParameter(O_OUTPUT,OracleDbType.RefCursor))。Direction = ParameterDirection.Output
adap_or.SelectCommand = cmd
adap_or.Fill(dt)


返回dt
ora_conn.Close()
结束F. unction



我的目的是通过带有进度条或动画gif的对话框通知用户表单正在加载并仍然从中获取记录数据库说请等待/搜索,并防止混淆用户,认为表格崩溃。



P.s.如果给出视频教程的链接会很有帮助。

我希望你能帮帮我,谢谢。




我尝试了什么:



我在互联网上找到了这组代码。它可以工作但是,如何使用Oracle存储过程从数据库中获取行来转换此导入CSV文件。



 Dim strRow As String()'用于读取行中所有字段的字符串数组
Dim dblAmount As Double'总金额的变量
Dim blnReported As Boolean = True'检查进度报告的标志是否已完成

'创建TextFieldParser类来解析当前位置的stock.csv文件
Dim txtFile As FileIO.TextFieldParser

Private Sub Form1_Load(sender As Object,e As EventArgs)处理MyBase.Load
'允许后台操作被取消
bgWorker.WorkerSupportsCancellation = True

'允许后台操作报告进度
bgWorker.WorkerReportsProgress = True

'禁用停止按钮。只有在按下
'按钮后才能启用它
btnStop.Enabled = False

'设置状态消息
lblStatus.Text =按开始导入数据来自CSV。

'向网格添加列
dgvCSVData.Columns.Add(colNo,No)
dgvCSVData.Columns(colNo)。宽度= 30
dgvCSVData.Columns.Add(colDate,Date)
dgvCSVData.Columns(colDate)。Width = 60
dgvCSVData.Columns.Add(colItem,Item)
dgvCSVData.Columns(colItem)。宽度= 120
dgvCSVData.Columns.Add(colQty,Quantity)
dgvCSVData.Columns(colQty)。宽度= 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)处理btnStart.Click
'禁用开始按钮并启用停止
btnStart.Enabled = False
btnStop.Enabled = True

'设置状态消息
lblStatus .Text =从CSV文件导入数据。

'在后台开始耗时的操作
调用bgWorker.RunWorkerAsync()
End Sub

Private Sub btnStop_Click(sender as Object,e As EventArgs)处理btnStop.Click
'启用开始按钮并禁用停止
btnStart.Enabled = True
btnStop.Enabled = False

'停止后台操作
bgWorker.CancelAsync()

'设置状态消息
lblStatus.Text =导入已取消。再次按开始。
End Sub

Private Sub bgWorker_DoWork(sender As Object,e As System.ComponentModel.DoWorkEventArgs)处理bgWorker.DoWork
Dim intCount As Int16 = 0
txtFile =新FileIO.TextFieldParser(stock.csv)
'指定文件的结构
txtFile.TextFieldType = FileIO.FieldType.Delimited
txtFile.SetDelimiters(,)

'跳过标题行
txtFile.ReadFields()

'开始从文件
读取数据而不是txtFile.EndOfData

如果bgWorker .CancellationPending然后
e.Cancel = True
退出Sub

否则

'等待进度报告完成
而不是blnReported
Application.DoEvents()
结束时

'将行中的所有字段读入字符串数组
s trRow = txtFile.ReadFields()

'做一些计算并为数据网格赋值
dblAmount = CDbl(strRow(3))* CDbl(strRow(4))

'添加一些睡眠模拟长时间运行操作
System.Threading.Thread.Sleep(500)

'进度报告待定
blnReported = False

'增量计数器
intCount + = 1

'报告进度
bgWorker.ReportProgress(10,intCount)

结束If

End
End Sub

Private Sub bgWorker_ProgressChanged(sender As Object,e As System.ComponentModel.ProgressChangedEventArgs)处理bgWorker.ProgressChanged
'复制值到数据网格
dgvCSVData.Rows.Add(strRow)
dgvCSVData.Rows(dgvCSVData.CurrentRow.Index - 1).Cells(colAmt)。Value = dblAmount

pgbCopyProgress.Value = e.UserState
'进度报告已完成
blnReported = True
End Sub

Private Sub bgWorker_RunWorkerCompleted( sender As Object,e As System.ComponentModel.RunWorkerCompletedEventArgs)处理bgWorker.RunWorkerCompleted
如果e.Cancelled Or Not IsNothing(e.Error)则
'清除数据网格
dgvCSVData.Rows。 Clear()
Else
'进度完成
pgbCopyProgress.Value = 100

'发布txtfile
txtFile.Dispose()
btnStop。 Enabled = False
btnStart.Enabled = True

End if
End Sub

解决方案

< blockquote>你可以使用进度条控制窗体来显示屏幕上的状态进度

如10%,40%和100%。



我们有进度条控制o ver VB.net,将该控件拖放到屏幕上。



  ProgressBar1.Value = 10  
---执行一些任务。

ProgressBar1.Value = 40
---执行一些任务。

ProgressBar1.Value = ProgressBar1.Maximum; //表示任务已完成


ProgressBar1.Value = 0









现在,如果您正在调用某些函数,那么您可以传递此Progressbar的引用

控制函数并管理函数的进度条状态。< br $>


公共函数SyncToOracle(ByRef p_objProgressBar As ProgressBar)

p_objProgressBar.Value = 10

ProgressBar1.Value = 40
---执行一些任务。

ProgressBar1.Value = ProgressBar1.Maximum //表示任务已完成


ProgressBar1.Value = 0

结束函数









- 你调用函数并传递进度条控件的对象功能

  SyncToOracle(ProgressBar1) 


Hi! everyone,I am just a newbie in Visual Basic.Net and Oracle stored procedure.

**Here's my code in calling the rows in the database**

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


My purpose is that the user will be informed through a dialog box with progress bar or animated gif, that the form is loading and still fetching records from the database says "Please wait"/"Searching", and prevent confusion to the user, of having thought that the form is crashed.

P.s. It would be helpful if give the links of the video tutorials.
I do hope you could help me , Thanks.


What I have tried:

I have this set of codes where I found on the internet. It works but, how can I convert this importing CSV file from fetching rows from the database using Oracle stored procedure.

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

解决方案

You can use progress bar control over form to show the status progress over the screen
like 10%, 40% and 100%.

We have progress bar control over VB.net, drag and drop that control over the screen.

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

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

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


ProgressBar1.Value = 0





Now if you are calling some functions so you can pass the reference of this Progressbar
control over functions and manage the status of progress bar from functions also.

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





--You call the function and pass the object of progress bar control over the function

SyncToOracle(ProgressBar1)


这篇关于当数据网格在VB.NET和oracle中从数据库中获取行时,如何显示进度条/加载屏幕的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆