0

我正在使用 VS2010(winform)和 Access 数据库,在我的水晶报表中,我通过创建DataSetPatient.xsd文件并使用下面的代码成功地显示了数据库中的表,现在我想将特定文件夹/文件夹路径中的图像显示到同一个报表中,因为我我是水晶报告的新手,请谁能一步一步告诉我我该怎么做

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()

第二:读取图像文件转换为二进制数组并将其存储到您的数据表中,

第三:现在您的数据表具有来自数据库的数据和来自路径图像的图像数据,将此数据表分配给数据库,并报告源:

代码:

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 ,你可以走任何你想要的路径。第二:这是运行时图像加载,第三:这里我还解释了如何将图像转换为字节数组,当你想将图像存储在数据库中时它会很有用

于 2014-06-03T10:32:20.090 回答