0

私はvs 2008とクリスタルレポートバージョン10.5を使用しています(SQLデータベースに画像パスを保存しました)

動的な画像を入れたいのですが、どうすればよいでしょうか。助けてください。

4

2 に答える 2

0

これを参照するか 、手順に従ってください

–> ファイル パスがデータベースに保存され、Crystal レポートの詳細セクションに画像を表示する必要がある場合

データベースに保存するイメージパスがある場合、Crystal Report XI の動的な画像の場所機能を使用しない限り、Visual Studio 2003/2005 の Crystal Report .NET は画像ファイルを動的に表示できません。

しかし、心配する必要はありません。これを回避する方法で表示できます。

  1. データベースにイメージパスが必要です。

  2. レポートの作成時にリソース データとして使用する新しいデータセット/XML スキーマ (xsd) を作成します。テーブルにない base64Binary タイプの追加フィールドを追加します。

  3. レポートをデザインするときは、表示したい領域に「image_stream」フィールドをドラッグ アンド ドロップします。

  4. コードに次のメソッドを追加します。

    private void AddImageColumn(DataTable objDataTable, string strFieldName) { try { DataColumn objDataColumn = new DataColumn(strFieldName, Type.GetType(“System.Byte[]“)); objDataTable.Columns.Add(objDataColumn); } catch (Exception ex) { Response.Write(“”+ex.Message+””); } }

  5. そして、これは画像をロードするためのものです:

    private void LoadImage(DataRow objDataRow, string strImageField, string FilePath) { try { FileStream fs = new FileStream(FilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read); byte[] Image = new byte[fs.Length]; fs.Read(画像、0、Convert.ToInt32(fs.Length)); fs.Close(); objDataRow[strImageField] = 画像; } catch (Exception ex) { Response.Write(“”+ex.Message+””); } }

  6. レポートの「SetDataSource」にデータセットを割り当てる前に、次のコードを追加します。

    AddImageColumn(ds.Tables[0], “image_stream”); for (int index=0; index < ds.Tables[0].Rows.Count; index++) { if (ds.Tables[0].Rows[index]["image_path"].ToString() != "") { if(File.Exists(this.Server.MapPath(ds.Tables[0].Rows[index]["image_path"].ToString()))) { LoadImage(ds.Tables[0].Rows[index] , “image_stream”, ds.Tables[0].Rows[index]["image_path"].ToString()); } else { LoadImage(ds.Tables[0].Rows[index], “image_stream”, “C:\NoImage.jpg”); } } else { LoadImage(ds.Tables[0].Rows[index], “image_stream”, “C:\NoImage.jpg”); } }

  7. そして最後に、Crystal Report Viewer でレポートを表示します。

    crDoc.SetDatabaseLogon(ユーザーID、パスワード、サーバー、データベース); crDoc.SetDataSource(ds.Tables[0]); CrystalReportViewer1.ReportSource = crDoc;

未テスト。

于 2012-04-10T09:06:08.020 に答える