0

私はVS2010(winform)とAccessデータベースを使用しています.Crystalレポートでは、DataSetPatient.xsdファイルを作成し、以下のコードを使用してデータベースからテーブルを正常に表示しています.今、私は特定のフォルダ/フォルダパスから同じレポートに画像を表示したいと考えています. Crystal Reports は初めてです。どなたか手順を教えてください。

public partial class ViewR : Form
    {        
        DBHandling db=new DBHandling();

        public ViewR()
        {
            InitializeComponent();             
        }

        private void ViewR_Load(object sender, EventArgs e)
        {
            CrystalReportP objRpt;
            // Creating object of our report.
            objRpt = new CrystalReportP();
            DataSetPatient ds = new DataSetPatient(); // .xsd file name
            DataTable dt = DBHandling.GetPatient();
            ds.Tables[0].Merge(dt);
            objRpt.SetDataSource(ds);            
            crystalReportViewer1.ReportSource = objRpt;          

        }        
    }
4

1 に答える 1

0

この方法を試してください

最初: データセットのデータテーブルに新しい列名 ("Image") を作成し、DataType を System.Byte() に変更します。

2 番目: イメージ ファイルを読み取り、バイナリ配列に変換し、データ テーブルに格納します。

3番目:データテーブルにはデータベースからのデータとパス画像からの画像データがあり、このデータテーブルをデータベースに割り当て、レポートソース:

コード:

private void ViewR_Load(object sender, EventArgs e)
    {
        CrystalReportP objRpt;
        // Creating object of our report.
        objRpt = new CrystalReportP();
        DataSetPatient ds = new DataSetPatient(); // .xsd file name
        DataTable dt = DBHandling.GetPatient();
        dt = GetImageRow(dt, "YourImageName.Jpg"); 
        ds.Tables[0].Merge(dt);
        objRpt.SetDataSource(ds);            
        crystalReportViewer1.ReportSource = objRpt;          

    }       

//この関数により、画像をデータテーブルに追加できます

private DataTable GetImageRow(DataTable dt, string ImageName)
    {

        try
        {

            FileStream fs;
            BinaryReader br;

            if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + ImageName))
            {
                fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + ImageName, FileMode.Open);
            }
            else
            {
                // if phot does not exist show the nophoto.jpg file 
                fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "nophoto.jpg", FileMode.Open);
            }
            // initialise the binary reader from file streamobject 
            br = new BinaryReader(fs);
            // define the byte array of filelength 
            byte[] imgbyte = new byte[fs.Length + 1];
            // read the bytes from the binary reader 
            imgbyte = br.ReadBytes(Convert.ToInt32((fs.Length)));

            dt.Rows[0]["Image"] = imgbyte;


            br.Close();
            // close the binary reader 
            fs.Close();
            // close the file stream 




        }
        catch (Exception ex)
        {
            // error handling 
            MessageBox.Show("Missing " + ImageName + "or nophoto.jpg in application folder");
        }
        return dt;
        // Return Datatable After Image Row Insertion

    }

注: 最初: ここではパスを Application Statrup path として使用します。任意のパスを使用できます。2番目: これは runTime Image loading 、3番目: ここでは、画像をバイト配列に変換する方法も説明しているので、画像をデータベースに保存する場合に役立ちます

于 2014-06-03T10:32:20.090 に答える