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

vs2008 C# Winform中水晶報表載入圖片的問題
我使用的是vs2008內建的Crystal report
首先我先建立rpt檔案
接著建立.xsd檔案,利用ADO.NET的方式將.xsd做為rpt的資料格式
xsd顯示如下:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="XMLSchema1"
targetNamespace="http://tempuri.org/XMLSchema1.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema1.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema1.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="Document">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="packinglist">
<xs:complexType>
<xs:sequence>
<xs:element name="P2" type="xs:string" minOccurs="0" />
<xs:element name="P3" type="xs:base64Binary" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

接著在.cs檔中載入圖片
部分程式碼如下:

  ds.Tables.Add();
  ds.Tables[0].Columns.Add("P3", System.Type.GetType("System.Byte[]"));
  ds.Tables[0].Columns.Add("P2", System.Type.GetType("System.String"));
  ds.Tables[0].AcceptChanges();
  ds.AcceptChanges();
  FileStream fLogo = new FileStream(g_sPath + @"\barcode.png", FileMode.Open, FileAccess.Read);
  BinaryReader bReader = new BinaryReader(fLogo);
  byte[] bt = bReader.ReadBytes(Convert.ToInt32(bReader.BaseStream.Length));
  if (ds.Tables[0].Rows.Count <= 0)
  {
  DataRow dr = ds.Tables[0].NewRow();
  ds.Tables[0].Rows.Add(dr);
  ds.Tables[0].AcceptChanges();
  ds.AcceptChanges();
  }
  ds.Tables[0].Rows[0]["P3"] = bt;
  ds.Tables[0].Rows[0]["P2"] = "ABC";
  ds.AcceptChanges();
  fLogo.Close();

  doc.SetDataSource(ds.Tables[0]);
  crystalReportViewer1.ReportSource = doc;

最後將資料型態為base64Binary的"P3"拉近rpt檔中,
顯示出來的圖片只有框線,中間是空白的,
另外我從oracle中讀取BLOB資料型態的資料,丟給rpt,所顯示出來的圖片也是空白的,但字串、數字等皆可正常顯示
想請問各位高手是否有好的解決方案。


------解决方案--------------------
探讨
後來我又測試使用DataSet1.xsd,將P3的DataType設為System.Byte[]
再讓rpt去用DataSet1.xsd這個資料來源,所跑出來的圖片還是空白的,外有黑框
可是P2(String)是可以正常顯示的。
不知道是我CR安裝問題,還是程式方面哪裡有誤,謝謝您幫解答