اگر تصمیم دارید کاربر لوگو رو انتخاب کنه از این کد میتونی ایده بگیری
Imports CrystalDecisions.CrystalReports.Engine
Public Class Form1
Private Sub ButtonSelectLogo_Click(sender As Object, e As EventArgs) Handles ButtonSelectLogo.Click
Dim openFileDialog As New OpenFileDialog()
openFileDialog.Filter = "Image Files|*.png;*.jpg;*.jpeg;*.gif;*.bmp"
If openFileDialog.ShowDialog() = DialogResult.OK Then
PictureBoxLogo.Image = Image.FromFile(openFileDialog.FileName)
End If
End Sub
Private Sub ButtonGenerateReport_Click(sender As Object, e As EventArgs) Handles ButtonGenerateReport.Click
Dim report As New ReportDocument()
report.Load("YourReportFile.rpt")
Dim logoByteArray As Byte() = ImageToByteArray(PictureBoxLogo.Image)
report.SetDataSource(logoByteArray)
CrystalReportViewer1.ReportSource = report
End Sub
Private Function ImageToByteArray(image As Image) As Byte()
Dim ms As New MemoryStream()
image.Save(ms, ImageFormat.Png)
Return ms.ToArray()
End Function
End Class
ولی فکر کنم بهتره کاربر یکبار لوگو رو در دیتابیس ذخیره کنه که نیاز نباشه موقع گزارشگیری به کرات لوگو رو انتخاب کنه . این هم برای خواندن عکس از دیتابیس . و گزارشگیری
Imports System.Data.SqlClient
Public Class Form1
Private connectionString As String = "Data Source=.\SQLEXPRESS;Initial Catalog=YourDatabase;Integrated Security=True"
Private connection As New SqlConnection(connectionString)
Private Sub ButtonSelectLogo_Click(sender As Object, e As EventArgs) Handles ButtonSelectLogo.Click
Dim openFileDialog As New OpenFileDialog()
openFileDialog.Filter = "Image Files|*.png;*.jpg;*.jpeg;*.gif;*.bmp"
If openFileDialog.ShowDialog() = DialogResult.OK Then
PictureBoxLogo.Image = Image.FromFile(openFileDialog.FileName)
' ذخیره تصویر لوگو در پایگاه داده
Dim imageBytes As Byte() = ImageToByteArray(PictureBoxLogo.Image)
SaveLogoToDatabase(imageBytes)
End If
End Sub
Private Sub SaveLogoToDatabase(imageBytes As Byte())
Dim query As String = "INSERT INTO CompanyLogo (LogoImage) VALUES (@LogoImage)"
Dim command As New SqlCommand(query, connection)
command.Parameters.Add("@LogoImage", SqlDbType.Image).Value = imageBytes
connection.Open()
command.ExecuteNonQuery()
connection.Close()
End Sub
Private Function ImageToByteArray(image As Image) As Byte()
Dim ms As New MemoryStream()
image.Save(ms, ImageFormat.Png)
Return ms.ToArray()
End Function
Private Sub ButtonGenerateReport_Click(sender As Object, e As EventArgs) Handles ButtonGenerateReport.Click
Dim report As New ReportDocument()
report.Load("YourReportFile.rpt")
' بازیابی تصویر لوگو از پایگاه داده
Dim logoBytes As Byte() = GetLogoFromDatabase()
Dim logoStream As New MemoryStream(logoBytes)
Dim logoImage As Image = Image.FromStream(logoStream)
PictureBoxLogo.Image = logoImage
' ارسال تصویر لوگو به گزارش
report.SetDataSource(logoBytes)
CrystalReportViewer1.ReportSource = report
End Sub
Private Function GetLogoFromDatabase() As Byte()
Dim query As String = "SELECT LogoImage FROM CompanyLogo"
Dim command As New SqlCommand(query, connection)
Dim adapter As New SqlDataAdapter(command)
Dim dt As New DataTable()
connection.Open()
adapter.Fill(dt)
connection.Close()
Dim logoBytes As Byte() = DirectCast(dt.Rows(0)("LogoImage"), Byte())
Return logoBytes
End Function
End Class