2016-07-25 140 views
0

在我的項目中,我有一個按鈕,單擊它時,應該從我的SQL Server數據庫打印當前活動的所有合同。有數百個活躍的合約,但目前,當我按下按鈕時,報表將加載,但報表不會。Crystal Reports不加載數據vb.net

我會盡我所能來證明這一點使用圖像和代碼,但任何人都能夠說明爲什麼出現這種情況?

//代碼打印按鈕

Private Sub btnPrintActive_Click(sender As Object, e As EventArgs) Handles btnPrintActive.Click 

    Try 
     Dim objlist As New ReportDocument 
     objlist.Load(readIni("REPORTS", directorypath & "connectionpaths.ini") & "\ContractList.rpt") 

     Dim info As CrystalDecisions.Shared.TableLogOnInfo 
     info = New CrystalDecisions.Shared.TableLogOnInfo() 

     info.ConnectionInfo.DatabaseName = "" 
     info.ConnectionInfo.ServerName = readIni("CONTRACTSTRING", directorypath & "connectionpaths.ini") 
     info.ConnectionInfo.Password = "" 
     info.ConnectionInfo.UserID = "" 
     objlist.Database.Tables(0).ApplyLogOnInfo(info) 

     objlist.RecordSelectionFormula = "{tblContracts.Agreement} = 'ACTIVE'" 

     Dim f As frmReports 
     f = New frmReports(con, acccon, "", 0, "", acccon, , objlist, ,) 
     f.Show() 

    Catch ex As Exception 
     errorLog(ex.Message, ex.StackTrace) 
     MsgBox("Failed to retrieve contract information from 'database', refer to error log") 
    End Try 

End Sub 

//這是報告的形式,但沒有報告

enter image description here

//證明有積極的報道

enter image description here

+0

這是一個全新的表單/報表,從未工作,或突然不再工作? –

+0

由於表單沒有顯示報告,而是顯示沒有數據的報告,您是否驗證過a)'.rpt'文件是應用程序正在查找的位置,以及b)「frmReports」正在加載它?我們可能需要在'frmReports'中看到構造函數。 –

+0

helloo @David ..是否解決了這個問題? –

回答

0

這現在已經修復。問題是我在報告中使用了2個數據庫表,但只提供了1的登錄信息,第二個沒有從服務器接收數據,因此它沒有顯示。我做的另一件事,改變了它以空白值登錄的事實。我的固定代碼現在是這個;

Private Sub btnPrintActive_Click(sender As Object, e As EventArgs) Handles btnPrintActive.Click 

    Try 
     Dim objlist As New ReportDocument 
     objlist.Load(readIni("REPORTS", directorypath & "connectionpaths.ini") & "\ContractList.rpt") 

     Dim info As CrystalDecisions.Shared.TableLogOnInfo 
     info = New CrystalDecisions.Shared.TableLogOnInfo() 

     Dim servername As String = (readIni("SQLConnection", directorypath & "connectionpaths.ini", "servername")) 
     Dim database As String = (readIni("SQLConnection", directorypath & "connectionpaths.ini", "database")) 
     Dim username As String = (readIni("SQLConnection", directorypath & "connectionpaths.ini", "username")) 
     Dim password As String = (readIni("SQLConnection", directorypath & "connectionpaths.ini", "password")) 
     Dim provider As String = (readIni("SQLConnection", directorypath & "connectionpaths.ini", "provider")) 

     info.ConnectionInfo.DatabaseName = database 
     info.ConnectionInfo.ServerName = servername 
     info.ConnectionInfo.Password = password 
     info.ConnectionInfo.UserID = username 

     objlist.Database.Tables(0).ApplyLogOnInfo(info) 
     objlist.Database.Tables(1).ApplyLogOnInfo(info) 

     objlist.RecordSelectionFormula = "{tblContracts.Agreement} = 'ACTIVE'" 

     Dim f As frmReports 
     f = New frmReports(con, acccon, "", 0, "", acccon, , objlist, ,) 
     f.Show() 

    Catch ex As Exception 
     errorLog(ex.Message, ex.StackTrace) 
     MsgBox("Failed to retrieve contract information from database, refer to error log") 
    End Try 

End Sub 
0

嘗試比較這一個:

try 
      { 

       String APPPATH = String.Empty; 
       CRPT = new ReportDocument(); 
       APPPATH = System.IO.Directory.GetCurrentDirectory() + "/CrystalReport/CrystalReport1.rpt"; 
       //APPPATH = "~/Crystal_report/mosum.rpt"; 
       CRPT.Load(APPPATH); 
       crViewer.RefreshReport(); 

       CLASS_PROJECT.crystalReportcls rptcls = new CLASS_PROJECT.crystalReportcls(); 

       ParameterFields paramFields = new ParameterFields(); 
       ParameterField paramField = new ParameterField(); 
       ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue(); 
       paramField.Name = "sdate"; 
       paramDiscreteValue.Value = "2016-07-01"; 
       paramField.CurrentValues.Add(paramDiscreteValue); 
       paramFields.Add(paramField); 


       crViewer.ParameterFieldInfo = paramFields; 
       crViewer.ReportSource = CRPT; 


       MessageBox.Show("Crystal logged in."); 
       CRPT.SetDatabaseLogon("dbusername", "dbpassword"); 
       rptcls.LogonCrystalReport(crViewer); 

      } 
      catch (Exception er) 
      { 

       MessageBox.Show(er.Message); 
      } 

這種結構正在爲我的樣本。你所要做的就是登錄水晶報告和報告路徑本身。