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 (文字列 columnName、型の種類) で
    CrystalDecisions.CrystalReports.Engine.Table.BuildTableFromMemberInfos (ArrayList memberInfos、ブール型 autoFlattenCurrentLevel、Int32 currentLevel、Int32 maximumLevels、文字列 namePrefix、DataTable テーブル) で
    CrystalDecisions.CrystalReports.Engine.Table.BuildTableFromEnumerable (IEnumerable コレクション、型 dataClassType、文字列 tableName) で
    CrystalDecisions.CrystalReports.Engine.Table.EnumerableToDataSet (IEnumerable コレクション) で
    CrystalDecisions.CrystalReports.Engine.Table.WrapAndCacheDotNetObject (オブジェクトの値、型の種類、ISCRAdoNetDataSet & crAdoNetDataSet) で
    CrystalDecisions.CrystalReports.Engine.Table.SetDataSource (オブジェクトの値、型の種類) で
    CrystalDecisions.CrystalReports.Engine.Table.SetDataSource (IEnumerable 列挙可能) で*

ソースコードを追加し、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

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 に答える