私はvs 2008とクリスタルレポートバージョン10.5を使用しています(SQLデータベースに画像パスを保存しました)
動的な画像を入れたいのですが、どうすればよいでしょうか。助けてください。
私はvs 2008とクリスタルレポートバージョン10.5を使用しています(SQLデータベースに画像パスを保存しました)
動的な画像を入れたいのですが、どうすればよいでしょうか。助けてください。
これを参照するか 、手順に従ってください
–> ファイル パスがデータベースに保存され、Crystal レポートの詳細セクションに画像を表示する必要がある場合
データベースに保存するイメージパスがある場合、Crystal Report XI の動的な画像の場所機能を使用しない限り、Visual Studio 2003/2005 の Crystal Report .NET は画像ファイルを動的に表示できません。
しかし、心配する必要はありません。これを回避する方法で表示できます。
データベースにイメージパスが必要です。
レポートの作成時にリソース データとして使用する新しいデータセット/XML スキーマ (xsd) を作成します。テーブルにない base64Binary タイプの追加フィールドを追加します。
レポートをデザインするときは、表示したい領域に「image_stream」フィールドをドラッグ アンド ドロップします。
コードに次のメソッドを追加します。
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+””); } }
そして、これは画像をロードするためのものです:
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+””); } }
レポートの「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”); } }
そして最後に、Crystal Report Viewer でレポートを表示します。
crDoc.SetDatabaseLogon(ユーザーID、パスワード、サーバー、データベース); crDoc.SetDataSource(ds.Tables[0]); CrystalReportViewer1.ReportSource = crDoc;
未テスト。