Member 13745089 Ответов: 1

Как показать фактическое время процесса с помощью индикатора выполнения в VB.NET


Всем привет,

Я разрабатываю программу. внутри него есть кнопка, которая экспортирует отчет crystal в PDF-файл.

когда мы нажимаем эту кнопку, требуется некоторое время, чтобы экспортировать отчет crystal в формате PDF.

Я хочу показать это фактическое время обработки, используя индикатор выполнения в моей форме.

Пожалуйста, помогите кому-нибудь, и ниже я упомянул коды, которые я использовал для экспорта crystal report в формате PDF

Спасибо

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

Private Sub SavePDF()
        Dim Local = File.ReadAllLines(Application.StartupPath + "\Settings\Connection\db.TWC") ' Use a note pad file to save the connectopn string
        Dim dt As New DataSet
        Dim cnn As SqlConnection
        Dim sqlAdp As SqlDataAdapter

        cnn = New SqlConnection(Local(0))
        cnn.Open()
        sqlAdp = New SqlDataAdapter("Select * from QuotationDB where Reference = '" & lblRef.Text.Trim.ToString & "'", cnn)
        cnn.Close() 'connection close here , that is disconnected from data source
        DataSet11.Clear()
        sqlAdp.Fill(DataSet11, "DataTable1")

        Dim objRpt As New ReportDocument
        objRpt.Load(Application.StartupPath + "\Settings\Reports\CrystalReport2.rpt")
        frmQuotationPrint.CrystalReportViewer2.ReportSource = objRpt
        frmQuotationPrint.CrystalReportViewer2.Refresh()
        Try
            Dim CrExportOptions As ExportOptions
            Dim CrDiskFileDestinationOptions As New DiskFileDestinationOptions()
            Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions()
            objRpt.SetDataSource(DataSet11.Tables(0))
            If lblMachine.Text = "25ton Mobile Crane" Then
                CrDiskFileDestinationOptions.DiskFileName = ("E:\Quoatitons\2018\25t MC\XPS\" & lblRef.Text & " (" & lblCustomerName.Text & ").pdf")
            End If
            If lblMachine.Text = "45ton Rough Terrain" Then
                CrDiskFileDestinationOptions.DiskFileName = ("E:\Quoatitons\2018\45t RT\XPS\" & lblRef.Text & " (" & lblCustomerName.Text & ").pdf")
            End If
            If lblMachine.Text = "50ton Mobile Crane" Then
                CrDiskFileDestinationOptions.DiskFileName = ("E:\Quoatitons\2018\50t MC\XPS\" & lblRef.Text & " (" & lblCustomerName.Text & ").pdf")
            End If
            If lblMachine.Text = "55ton Crawler Crane" Then
                CrDiskFileDestinationOptions.DiskFileName = ("E:\Quoatitons\2018\55t CC\XPS\" & lblRef.Text & " (" & lblCustomerName.Text & ").pdf")
            End If
            CrExportOptions = objRpt.ExportOptions
            With CrExportOptions
                .ExportDestinationType = ExportDestinationType.DiskFile
                .ExportFormatType = ExportFormatType.PortableDocFormat
                .DestinationOptions = CrDiskFileDestinationOptions
                .FormatOptions = CrFormatTypeOptions
            End With
            objRpt.Export()

        Catch ex As Exception

        End Try
    End Sub

Richard Deeming

"Select * from QuotationDB where Reference = '" & lblRef.Text.Trim.ToString & "'"


Ваш код потенциально уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

sqlAdp = New SqlDataAdapter("Select * from QuotationDB where Reference = @Reference", cnn)
sqlAdp.SelectCommand.Parameters.AddWithValue("@Reference", lblRef.Text.Trim())

1 Ответов

Рейтинг:
4

jsc42

Ваш вопрос своевременен, так как я унаследовал старое приложение, и оно запускает отчеты CR, и нет никакого способа держать пользователя в курсе, когда оно работает. Однако в моем случае получение данных из базы данных занимает больше времени, чем их запись в отчет CR.

Я не смог найти никакой разумной документации для класса ExportOptions в CR. Я предполагаю, что вы не можете подключиться к методу Export (), чтобы получить от него статусы прогресса. Лучшее, что я могу предложить, - это использовать стандарт .Net ProgressBar управляет и использует стиль Marquee, который явно предназначен для указания на то, чтобы указать сценарий "что-то происходит, но я не знаю, сколько времени это займет". Запустите (или сделайте видимым) индикатор выполнения, вызовите метод Export() и сразу же после возвращения из Export() остановите (или сделайте невидимым) индикатор выполнения.


Maciej Los

Хорошая мысль, пятерка!