日期:2014-05-20  浏览次数:20811 次

水晶报表图片显示不出来。。
水晶报表图片显示不出来(即报表页为空白)
我的实现方法如下:
1、建立数据集文件,图片字体为 base64Binary :
<xs:element name="photo" msprop:Generator_UserColumnName="photo" msprop:Generator_ColumnVarNameInTable="columnphoto" msprop:Generator_ColumnPropNameInRow="photo" msprop:Generator_ColumnPropNameInTable="photoColumn" type="xs:base64Binary" minOccurs="0" />

2、代码(图片文件路径存储在数据库中):
sqlstr = "select PF001,PF002 from PPSPF where PF001='" + PF001 + "'";
  DataSet ds1 = database.GetDataSet(sqlstr);

  if (ds1.Tables[0].Rows.Count > 0)
  {
  tempstr = Request.PhysicalApplicationPath;
  DataSet ds = new DataSet();
  ds.Tables.Add("NewTable");
  ds.Tables[0].Columns.Add("PF001", Type.GetType("System.String"));
  ds.Tables[0].Columns.Add("photo", Type.GetType("System.Byte[]"));
  ds.Tables[0].Columns.Add("PF002", Type.GetType("System.String"));
  for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
  {
  path = tempstr + ds1.Tables[0].Rows[i]["PF002"].ToString();
  Addphoto(ds.Tables[0],ds1.Tables[0].Rows[i]["PF001"].ToString(),ds1.Tables[0].Rows[i]["PF002"].ToString(),path);
   
  }

  ReportDocument rdDoc = new ReportDocument();
  tempstr = Server.MapPath("../rpt") + "\\" + "photorpt.rpt";
  rdDoc.Load(tempstr);
  rdDoc.SetDataSource(ds.Tables["NewTable"]);
  rptv.ReportSource = rdDoc;
  }


添加图片到Dataset的方法
void Addphoto(DataTable Table,string c1,string c2, string FilePath)
{
FileStream fileStream = new FileStream(FilePath, FileMode.Open);
BinaryReader br = new BinaryReader(fileStream);
DataRow dr = Table.NewRow();

dr[0] = c1;
dr[1] = br.ReadBytes((int)br.BaseStream.Length);
dr[2] = c2;

Table.Rows.Add(dr);
br.Close();
fileStream.Close();
}


哪位大大指点下。。。 谢谢





------解决方案--------------------
没做过图片
看阿泰的这个文章
【原创】为你的水晶报表加载本地图片
------解决方案--------------------
1:你报表里用的表名称是什么,是否与ds.Tables.Add("NewTable"); 这里的NewTable名称一致
2:base64Binary是VS2003里的字段类型,而在VS2005里应该用Byte[]

从这两个方面看看