2012-10-31 93 views
0

我有一個在VS 2008中爲.net 2編寫的應用程序,升級到VS 2010併爲.net 4構建。在這個應用程序中是Crystal Report 。報告應該完全沒有數據庫交互。我手動設置我的項目中的一個對象的各種ITextObject字段。從VS 2008升級到VS 2010後出現「數據庫登錄失敗」錯誤

實施例:

  to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbName"]; 
      to.Text = visitor.first + " " + visitor.last; 

      to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbCompany"]; 
      to.Text = visitor.company; 

其中visitor是我是從拉數據的類。

同樣,這個報告應該完全沒有數據庫交互,但它不知何故認爲它應該是一個數據庫。

以下是有關堆棧跟蹤: CrystalDecisions.ReportAppServer.DataSetConversion

編輯:它吹起來,當我打電話.PrintToPrinter(1, false, 1, 0);

*編輯/ UPDATE * 我捅到app.config文件,和我發現這個小塊

<startup useLegacyV2RuntimeActivationPolicy="true"> 
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 

在應用程序中,我的報告打印。與註釋掉,它炸燬.....

編輯3:

更多的源代碼:

cryBadge crystalPrint = new cryBadge(); 
crystalPrint.ReportOptions.EnableSaveDataWithReport = false; 

//NOTE: pi is an internal object used to find printer information. 
crystalPrint.PrintOptions.PrinterName = pi.PrinterName; 
numSize = pi.FindPaperSizeIndex(height, wid); 
to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbName"]; 
      to.Text = visitor.first + " " + visitor.last; 

to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbCompany"]; 
to.Text = visitor.company; 
crystalPrint.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape; 
crystalPrint.PrintToPrinter(1, false, 1, 0); 
+0

爲什麼不嘗試將項目從.net 4.0降級到3.5重新編譯它,看看它是否工作..如果它這樣做告訴我,CrystalReports大會可能不支持版本4.0嘗試查閱文檔,看看支持哪些版本。 。您可能需要升級到更高版本的.dll和/或程序集。 – MethodMan

+0

好吧,現在它在不同的地方爆炸了。 'crystalPrint.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape;'它拋出了一個'System.Reflection.TargetInvocationException'如果我在.net 3中,看起來我不能設置紙張方向。5 – CurtisHx

+0

這聽起來像你可能有一些額外的或隱藏的問題,根據你發佈的代碼示例無法確定..你可以發佈支持當前錯誤的相關代碼示例.. – MethodMan

回答

0

好吧。弄清楚了。

我在這個代碼塊進入app.config文件:

<startup useLegacyV2RuntimeActivationPolicy="true"> 
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 

然後確保配置文件保持與.exe文件。例如,如果應用程序名爲「TestApp1」,有應該是輸出文件夾中的TestApp1.exe.config文件。該.config文件需要與應用程序保持一致。

0

例如,如果我想打印使用Crystal Reports我會做一個報告像根據你的榜樣

.PrintToPrinter(1, false, 1, 0); 

可能要牛逼低於

以下Ø在這裏嘗試重構你的代碼是一個示例

ReportDocument rd = new ReportDocument(); 
// Insert code to run the report here 

// This gets the user's default printer to print to. 
PrintDialog prt = new PrintDialog(); 
rd.PrintOptions.PrinterName = prt.PrinterSettings.PrinterName; 
// This does the printing. 
rd.PrintToPrinter(copies, true, 1, 1000); 

的工作例如,你可以嘗試以及低於..

//Note untested 
PrintDialog pDialog = new PrintDialog(); 

Nullable<Boolean> print = pDialog.ShowDialog(); 
if (print == true) 
{ 
    string value1 = "This is a Test"; 
    string value2= "Happy Halloween"; 
    ReportDocument rd = new ReportDocument(); 
    rd.Load("ReportFile.rpt"); 
    rd.SetParameter("Parameter1", value1); 
    rd.SetParameter("Parameter2", value2); 
    rd.PrintOptions.PrinterName = pd.PrinterSettings.PrinterName; 
    rd.PrintToPrinter(1, false,0,0); 
} 
相關問題