1

Crystal Report 在版本 10.5 和 Visual Studio 2008 (.NET framework 3.5) 下开发并运行良好。但是,当迁移到版本 13.0.2 和 Visual Studio 2010 (.NET framework 4.0) 时。我收到以下错误:

有人有过类似的经历吗?欢迎任何帮助或解决方案。


消息:名为“**Item**”的列已属于此 DataTable。
来源:System.Data
当前方法:Void RegisterColumnName(System.String, System.Data.DataColumn)
堆栈跟踪:
    在 System.Data.DataColumnCollection.RegisterColumnName(字符串名称,DataColumn 列)
    在 System.Data.DataColumnCollection.BaseAdd(DataColumn 列)
    在 System.Data.DataColumnCollection.AddAt(Int32 索引,DataColumn 列)
    在 System.Data.DataColumnCollection.Add(字符串列名,类型类型)
    在 CrystalDecisions.CrystalReports.Engine.Table.BuildTableFromMemberInfos(ArrayList memberInfos,布尔 autoFlattenCurrentLevel,Int32 currentLevel,Int32 maximumLevels,字符串 namePrefix,DataTable 表)
    在 CrystalDecisions.CrystalReports.Engine.Table.BuildTableFromEnumerable(IEnumerable 集合,类型 dataClassType,字符串表名)
    在 CrystalDecisions.CrystalReports.Engine.Table.EnumerableToDataSet(IEnumerable 集合)
    在 CrystalDecisions.CrystalReports.Engine.Table.WrapAndCacheDotNetObject(对象 val,类型类型,ISCRAdoNetDataSet& crAdoNetDataSet)
    在 CrystalDecisions.CrystalReports.Engine.Table.SetDataSource(对象 val,类型类型)
    在 CrystalDecisions.CrystalReports.Engine.Table.SetDataSource(IEnumerable enumerable)*

添加了源代码,DetailSps 和其他数据集在 .xsd 文件中定义。错误来自:Report.Database.Tables["DetailSps"].SetDataSource:

    public void CreateReport(ReportInfo reportInfo)
    {
        PopulateReportData(reportInfo.SpecDetail.Table);

        ReportClass Report = new DetailsRpt();

        Report.ReportOptions.EnableSaveDataWithReport = true;
        Report.ReportOptions.EnableSaveSummariesWithReport = true;

        // now add the tables used in Report
        Report.Database.Tables["DetailSps"].SetDataSource(
            DetailSps.OrderBy(x => x.ID)
                .ThenBy(x => x.Specall_ID));


    .....
}


    private void PopulateReportData(DataTable dt)
    {
        foreach (DataRow dr in dt.Rows)
        {
            DetailSps.AddDetailsRow(
                (String)dr["ID"], 
                (String)dr["Type"], 
                CommonDateFunctions.FormatStringAsDateMDYYYY(dr["selected_date"].ToString()), 
        ......
                (String)dr["ErrorCode"]
                );
        }

        ....
    }
4

2 回答 2

1

我记得一年前升级项目时遇到了完全相同的问题。我确定“项目”冲突是由 Visual Studio 设计人员在其自动生成的代码文件之一中创建项目对象引起的。在我的例子中,我认为是我用来为 Crystal 数据源建模的 XML Schema 设计器。

我最终将我的列重命名为不是“项目”。

于 2013-03-06T03:03:28.100 回答
0

出于调试目的,我会尝试打破这一行:

    // now add the tables used in Report
    Report.Database.Tables["DetailSps"].SetDataSource(
        DetailSps.OrderBy(x => x.ID).ThenBy(x => x.Specall_ID));

类似于:

    DataTable dataTable = DetailSps.OrderBy(x => x.ID).ThenBy(x => x.Specall_ID);

    Report.Database.Tables["DetailSps"].SetDataSource(dataTable);

看看您是否可以进一步隔离问题。

也许还可以在违规行之前设置一个断点,并查看快速监视窗口中的数据表或遍历所有列/行并查看名称和数据...

于 2013-03-08T00:48:47.953 回答