在同一水晶报告中显示图像(来自文件夹)和表格(来自数据库)
本文关键字:文件夹 数据库 表格 图像 水晶 报告 显示图 显示 | 更新日期: 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
}
注意:首先:这里我把路径作为应用程序统计路径,你可以采用任何你想要的路径。第二:这是运行时镜像加载,第三:在这里我也解释了如何将图像转换为字节数组,因此,当您想将图像存储在数据库中时,它将很有用