0

imageこんにちは、 converted fromByte[]を渡して次のようString[]に表示しようとしReportViewer Imageています:

String[] dataImage;
private void showLogo()
{
    try
    {
        SqlDataAdapter dataAdapter = new SqlDataAdapter( new SqlCommand("SELECT logo
                                           FROM company WHERE id = 1", spojeni));
        DataSet dataSet = new DataSet();
        dataAdapter.Fill(dataSet);
        if (dataSet.Tables[0].Rows.Count == 1)
        {
            dataImage = new String[0];
            dataImage = (String[])(dataSet.Tables[0].Rows[0]["logo"]);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(""+ex);
    }
}

そして、これはReportViewerパラメータです:

ReportParameter[] parameter = new ReportParameter[24];
parameter[23] = new ReportParameter("rp_logo", dataImage );
this.reportViewer1.LocalReport.SetParameters(parameter);
this.reportViewer1.RefreshReport();

しかし、次のようになりますExceptionUnable to cast object of type 'System.Byte[]' to type 'System.String[]'

誰かがこれを解決するのを手伝ってくれますか?

お時間をいただきありがとうございます。

4

2 に答える 2

2

実際ReportViewerの画像データ自体ではなく、画像へのパスが必要な場合、ここでの最善の策は、byte[]ディスクに保存し、代わりにパラメーターでこれを参照することです。

using (var cmd = new SqlCommand("SELECT logo FROM company WHERE id = 1", spojeni))
using (var dataAdapter = new SqlDataAdapter(cmd))
using (var dataSet = new DataSet())
{
    dataAdapter.Fill(dataSet);
    if (dataSet.Tables[0].Rows.Count == 1)
    {
        // generate temp file destination
        dataImage = System.IO.Path.GetTempFileName() + ".jpg"; // use whatever extension you expect the file to be in
        File.WriteAllBytes(dataImage, (byte[])dataSet.Tables[0].Rows[0]["logo"]); // save image to disk
    }

}
于 2013-10-14T11:58:03.143 に答える