为什么会出现此错误:指定的强制转换无效

时间:2013-09-27 07:02:58

标签: c# .net crystal-reports

我使用此代码在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;
        }

2 个答案:

答案 0 :(得分:0)

此消息来自数据。检查DataTable dt的结构是否与DataSetPatient中第一个表的结构相同。

您也可以尝试替换DataSetPatient的代码。

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

DataSet ds = new Dataset() ds.Tables.Add

答案 1 :(得分:0)

这对我有用:

如果要在64位计算机上进行安装,请确保“构建”选项卡下的应用程序属性具有“任何CPU”作为平台目标,如果您有选项,请取消选中“首选32位”复选框。 Crystal对于32/64位组件非常敏感,并且做出一些非常违反直觉的假设,这些假设非常难以排除故障。