Вы сделали правильный выбор .Tag
.Он может содержать любой тип объекта.Я предполагаю, что вы заполняете свой список в цикле, используя DataReader.Вы создаете новый элемент представления списка на каждой итерации.В этом ListViewItem
вы должны заполнить свойство .Tag необработанными данными.Затем, когда элемент выбран, вы извлекаете необработанные данные, конвертируете их в массив байтов и помещаете его в MemoryStream.Свойство .Image
затем заполняется из потока.
Для упрощения я использовал одну запись и TextBox.
Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
RetrieveImage()
Using MS As New MemoryStream(CType(txtName.Tag, Byte()))
PictureBox1.Image = Image.FromStream(MS)
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
End Using
End Sub
Private Sub RetrieveImage()
Using cn As New SqlConnection(My.Settings.SmallDBConnection)
Using cmd As New SqlCommand("Select * From Sales.Customer Where CustomerID = 2", cn)
cn.Open()
Using dr As SqlDataReader = cmd.ExecuteReader
dr.Read()
txtName.Text = dr("CustomerName").ToString
txtName.Tag = dr("Picture")
End Using
End Using
End Using
End Sub