显示图像(来自文件夹)和表(来自数据库)在同一个Crystal Report中

时间:2013-09-28 06:09:38

标签: c# winforms crystal-reports

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

        }        
    }

1 个答案:

答案 0 :(得分:0)

试试这种方式

首先:在数据集的数据表中创建一个新列名(" Image"),并将DataType更改为System.Byte()

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

第三:现在您的数据表包含来自数据库的数据和来自Path映像的Image数据,将此数据表分配给数据库,以及Report Source:

代码:

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