在同一水晶报告中显示图像(来自文件夹)和表格(来自数据库)

本文关键字:文件夹 数据库 表格 图像 水晶 报告 显示图 显示 | 更新日期: 2023-09-27 18:33:11

我正在使用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;          
        }        
    }

在同一水晶报告中显示图像(来自文件夹)和表格(来自数据库)

试试这种方式

首先:在数据集的数据表中创建一个新列名("图像"),并将数据类型更改为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
    }

注意:首先:这里我把路径作为应用程序统计路径,你可以采用任何你想要的路径。第二:这是运行时镜像加载,第三:在这里我也解释了如何将图像转换为字节数组,因此,当您想将图像存储在数据库中时,它将很有用