[C#][ASP.NET][ReportViewer]報表資料列中的圖片不在資料庫的呈現方式

摘要:[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;
    }
}