2013-09-27 97 views
1

我使用此代碼打開VS2010水晶報表,axCRViewer1crystal report viewer control name,但在這行爲什麼收到此錯誤:指定的轉換是無效

axCRViewer1.ReportSource = rptDoc;

如何解決它得到錯誤?

private void ViewR_Load(object sender, EventArgs e) 
      { 
       ReportDocument rptDoc = new ReportDocument(); 
       DataSetPatient ds = new DataSetPatient(); // .xsd file name 
       DataTable dt1 = new DataTable(); 
       DataTable dt = DBHandling.GetPatient();//getting data using GetPatient() 

       // Just set the name of data table 
       dt.TableName = "Crystal Report P"; 
       ds.Tables[0].Merge(dt); 

       // Your .rpt file path will be below 
       rptDoc.Load("C:\\Users\\Monika\\Documents\\Visual Studio 2010\\Projects\\SonoRepo\\SonoRepo\\Reports\\CrystalReportP.rpt"); 

       //set dataset to the report viewer. 
       rptDoc.SetDataSource(ds); 
       axCRViewer1.ReportSource = rptDoc;//getting error at this line 
       // code to get data from the DB   
      } 

Getpatient()的代碼

public static DataTable GetPatient() 
     { 
      DataTable patientTable = new DataTable(); 
      using (OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sonorepo.mdb")) 
      { 
       using (OleDbDataAdapter da = new OleDbDataAdapter(@"SELECT PatientID,PFirstName FROM Patient_Registration", con)) 
        da.Fill(patientTable); 
      } 
      return patientTable; 
     } 
+0

'axCRViewer1.ReportSource'預期的類型是什麼,使用'(顯式強制轉換)rptDoc'作爲該類型並嘗試。 –

+0

也許這與您的問題有關http://scn.sap.com/message/14127240 – V4Vendetta

回答

0

這個消息是從所述數據到來。檢查DataTable dt的結構是否與DataSetPatient中第一個表的結構相同。

您也可以嘗試替換DataSetPatient的代碼。

DataSetPatient ds = new DataSetPatient(); // .xsd文件名 .... ds.Tables [0] .Merge(dt);

的DataSet DS =新的DataSet() ds.Tables.Add

0

這裏是爲我工作:

如果您在64位計算機上安裝,確保Build選項卡下的應用程序屬性具有「Any CPU」作爲平臺目標,如果您有選項,則取消選中「首選32位」複選框。 Crystal對於32/64位程序集非常敏感,並且提出了一些非常不直觀的假設,這些假設很難排除故障。

相關問題