摘要:[C#][ASP.NET][ReportViewer]報表資料列中的圖片不在資料庫的呈現方式
執行畫面:
先在此報表繫結的DataSet.DataTable新增一個放置圖片的Column名叫"大頭照":
再設定大頭照Column的DataType屬性為System.Byte[]
再來設定RDLC資料列裡的圖片的"資料"屬性:
.aspx程式如下:
說明:
將<rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1_主唱" />中的"DataSourceId="ObjectDataSource1""刪除,
改由另寫程式繫結。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana"
Font-Size="8pt" Height="600px" Width="600px">
<LocalReport ReportPath="Report.rdlc">
<DataSources>
<rsweb:ReportDataSource Name="DataSet1_主唱" />
</DataSources>
</LocalReport>
</rsweb:ReportViewer>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetData" TypeName="DataSet1TableAdapters.主唱TableAdapter">
</asp:ObjectDataSource>
</div>
</form>
</body>
</html>
.cs程式如下:
說明:
先將ObjectDataSource1讀取的資料(除了大頭照的資料)給DataTable_1,再將對應的圖片檔案轉成byte[]後存入DataTable_1的大頭照欄位,最後將DataTable_1給ReportViewer1繫結。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Web.Configuration;
using System.Data.SqlClient;
using System.IO;
public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataTable DataTable_1 = ((DataView)ObjectDataSource1.Select()).Table;
byte[] byte_1;
foreach (DataRow a in DataTable_1.Rows)
{
using (FileStream FileStream_1 = new FileStream(Server.MapPath("~/App_Data/Pic_Head/" + a["ID"].ToString() + ".jpg"), FileMode.Open, FileAccess.Read))
{
byte_1 = new byte[FileStream_1.Length + 1];
FileStream_1.Read(byte_1, 0, (int)FileStream_1.Length);
}
a["大頭照"] = byte_1;
}
ReportViewer1.LocalReport.DataSources["DataSet1_主唱"].Value = DataTable_1;
}
}