0

このコードを使用してレポートを表示しています

Dim rpt As New CrystalReport1()

Dim sql As String
Dim where As String




If con Is Nothing OrElse con.State = ConnectionState.Closed Then
    'MsgBox("closed")
    OpenCon()
End If

Dim m As String
m = ""
For Each n As TreeNode In GetCheck(TreeView1.Nodes)
    If n.Tag = 1 Then
        m = m
    Else
        If m = "" Then
            m = (n.Tag)
        Else
            m = m & ", " & (n.Tag)
        End If

    End If

Next

sql = "SELECT [bran_id],[f01],[f02],[f03],[f04],[f05],[f06],[f07],[f08],[bran_name],[comp_id],[comp_name],'" & dtStart.Value.Date & "' AS start_date, '" & dtEnd.Value.Date & "' AS end_date FROM [v_complain]"

If m = "" Then
    MsgBox("لم يتم تحديد اى مدينة من فضلك قم بالاختيار اولا")
    Exit Sub
Else

    where = " WHERE bran_id in (" & m & ") and f02 between CONVERT(date,'" & dtStart.Value.Date & "',103) and CONVERT(date,'" & dtEnd.Value.Date & "',103)"

    sql = sql + where

    If cbF06.Checked = True Then
        where = " AND (f06 like N'') or (f06 is null)"
        sql = sql + where
    End If

    If cbF07.Checked = True Then
        where = " AND (f07 like N'') or (f07 is null)"
        sql = sql + where
    End If


    Dim dscmd As New SqlDataAdapter(sql, con)
    Dim ds As New DataTable

    dscmd.Fill(ds)
    rpt.SetDataSource(ds)
    CrystalReportViewer1.ReportSource = rpt
    CrystalReportViewer1.Refresh()

End If
con.Close()

しかし、最初にレポートを表示するには遅すぎます。ウィンドウを閉じずにもう一度実行しようとすると、完全に機能します。速くする方法はありますか?

ありがとう

4

1 に答える 1

0

どれくらい遅いですか?数秒?基になるレポート「エンジン」を初期化する必要がある場合に発生すると思います。同様の問題が発生しましたが、ユーザーに「レポートを作成しています。お待ちください...」というメッセージを表示するのが最善の方法でした。別の方法として、アプリを起動するときに、「偽の」呼び出しを行って、ユーザーに何も表示せずにバックグラウンドでダミーレポートを作成できるため、ユーザーが実際のレポートを作成する準備ができるまでに、必要なすべてのリソースが初期化されます。 。

于 2012-09-27T19:43:44.230 に答える