为什么收到此错误:指定的强制转换无效

本文关键字:转换 无效 错误 为什么 | 更新日期: 2023-09-27 18:32:56

我正在使用此代码在VS2010中打开晶体报告,axCRViewer1 crystal 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           
            }

获取患者() 代码

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;
        }

为什么收到此错误:指定的强制转换无效

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

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

DataSetPatient ds = new DataSetPatient();//.xsd 文件名....DS.表格[0]。合并(dt);

数据集 ds = 新数据集()DS.表.添加

以下是对我有用的方法:

如果要在 64 位计算机上安装,请确保"生成"选项卡下的应用程序属性将"任何 CPU"作为平台目标,如果有该选项,请取消选中"首选 32 位"复选框。Crystal 对 32/64 位程序集非常敏感,并做出了一些非常违反直觉的假设,这些假设很难排除故障。