我正在使用 vs 2008 和水晶报表 10.5 版(我在 sql 数据库中保存了图像路径)
我想把动态图像我该怎么做请帮助我。
你可以参考这个 或按照步骤
–> 当文件路径存储在数据库中并且需要在水晶报表的详细信息部分显示图像时
如果您有存储在数据库中的图像路径,则 Visual Studio 2003/2005 中的 Crystal Report .NET 无法动态显示图像文件,除非您使用 Crystal Report XI 中的动态图像定位功能。
但别担心,它可以通过一些解决方法来显示。
您的数据库中必须有 imagepath。
创建新的数据集/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+””); } }
而这个加载图像:
私有 void LoadImage(DataRow objDataRow, string strImageField, string FilePath) { try { FileStream fs = new FileStream(FilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read); 字节[]图像=新字节[fs.Length];fs.Read(Image, 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”); } }
最后在水晶报表查看器中显示报表
crDoc.SetDatabaseLogon(用户 ID、密码、服务器、数据库);crDoc.SetDataSource(ds.Tables[0]); CrystalReportViewer1.ReportSource = crDoc;
未经测试。
这实际上很容易,请遵循以下步骤:
我已经在我的项目中测试过了